Bidirectional-streams Over Synchronous HTTP (BOSH) (XEP-0124)
Overview
BOSH (or HTTP binding) is a technique designed for asynchronous XMPP communication between client and server using HTTP. Unlike Jabber HTTP Polling (XEP-0025), it uses multiple request/response pairs to improve responsiveness and avoid unnecessary polling. Besides client and server, there is a Connection Manager entity in BOSH architecture, that serves as a mediator handling HTTP requests from clients and communicating with server. Client communicates with CM via HTTP-POST requests/HTTP responses defined in mentioned XEP and CM communicates with XMPP server either acting as ordinary XMPP client or using component protocol. For sake of server-initiated XMPP messages there should be always a HTTP request pending in client-CM connection. In practice, CM can be standalone HTTP server or extension of XMPP server (more on the technique)
Possible utilization is in web-based XMPP applications or as an option for users behind restrictive firewalls.
List of XMPP software implementing BOSH
Servers
Servers with built-in Connection Manager.
- Openfire - XEP-0124 listed in supported XEPs.
- ejabberd - Release notes for version 2.0.0 mention XEP-0124 support.
- Tigase Server - BOSH support since 3.0.2
Standalone Connection Managers
Act as a proxy between client and XMMP server.
- Araneo - Minimal CM written in Python using Twisted.
- Punjab - Python and Twisted again.
- rhb - CM in Ruby.
- JabberHTTPBind- Java servlet implementing XEP-0124.
Clients
- JWChat - full featured JavaScript client. Needs CM to operate, uses JSJaC library.
- soashable
- Minichat
- Tigase Messenger
- SparkWeb
Libraries
- gloox (C++) - BOSH support done by MattJ during GSoC 2007. BOSH Connection classes are included in svn trunk and 1.0-beta2 (download page).
- xmpp4r (Ruby)
- xmpp4js (JavaScript)
- JSJaC (JavaScript)
- emite (Google Web Toolkit, Java) - XMPP library and client GUI for gwt, connecting through BOSH
- agsXMPP (.NET / c# / Mono)
- MatriX (Silverlight c#)
Connection Manager.
Discussion
A small, low-volume discussion list about BOSH technologies is located at bosh@xmpp.org -- join the list by sending email to bosh-subscribe@xmpp.org or by visiting http://mail.jabber.org/mailman/listinfo/bosh.
Notes
Matthew Wild added BOSH support to the gloox C++ library as part of Google Summer of Code 2007.
Tomas Karasek is adding BOSH support to the Gajim client as part of Google Summer of Code 2008.
Safa SofuoÄŸlu updated and improved BOSH support of the Openfire and XIFF as part of Google Summer of Code 2008.