Difference between revisions of "Bidirectional-streams Over Synchronous HTTP (BOSH) (XEP-0124)"
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
__TOC__ | |||
==Overview== | |||
[http://www.xmpp.org/extensions/xep-0124.html BOSH] (or HTTP binding) is a technique designed for asynchronous XMPP communication between client and server using HTTP. Unlike Jabber HTTP Polling ([http://www.xmpp.org/extensions/xep-0025.html 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 [http://www.xmpp.org/extensions/xep-0114.html 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 ([http://www.xmpp.org/extensions/xep-0124.html#technique 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. | |||
* [http://www.igniterealtime.org/projects/openfire/index.jsp Openfire] - XEP-0124 listed in [http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/protocol-support.html supported XEPs]. | |||
* [http://www.ejabberd.im/ ejabberd] - Release notes for version [http://www.process-one.net/en/ejabberd/release_notes/release_note_ejabberd_200/ 2.0.0] mention XEP-0124 support. | |||
* [http://www.tigase.org/ Tigase Server] - BOSH support since [http://www.tigase.org/node/1353 3.0.2] | |||
===Standalone Connection Managers=== | |||
Act as a proxy between client and XMMP server. | |||
* [http://blog.bluendo.com/ff/bosh-connection-manager-update Araneo] - Minimal CM written in Python using Twisted. | |||
* [http://www.butterfat.net/wiki/Projects/PunJab Punjab] - Python and Twisted again. | |||
* [http://rubyforge.org/projects/rhb/ rhb] - CM in Ruby. | |||
* [http://zeank.in-berlin.de/jhb/ JabberHTTPBind]- Java servlet implementing XEP-0124. | |||
===Clients=== | |||
* [http://jwchat.sourceforge.net/ JWChat] - full featured JavaScript client. Needs CM to operate, uses [http://zeank.in-berlin.de/jsjac/ JSJaC] library. | |||
* [http://www.soashable.com/ soashable] | |||
===Libraries=== | |||
* [http://camaya.net/gloox gloox] (C++) - BOSH support done by MattJ during GSoC 2007. BOSH Connection classes are included in svn trunk and 1.0-beta2 ([http://camaya.net/glooxdownload download page]). | |||
* [http://home.gna.org/xmpp4r/ xmpp4r] (Ruby) | |||
* [http://xmpp4js.sourceforge.net/index.html xmpp4js] (JavaScript) | |||
* [http://zeank.in-berlin.de/jsjac/ JSJaC] (JavaScript) | |||
* [http://code.google.com/p/emite/ emite] (Google Web Toolkit, Java) - XMPP library and client GUI for gwt, connecting through BOSH 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 http://mail.jabber.org/mailman/listinfo/bosh]. | |||
==Notes== | |||
[http://matthewstechnologyblog.blogspot.com/ Matthew Wild] added BOSH support to the [http://camaya.net/gloox gloox] C++ library as part of Google Summer of Code 2007. | [http://matthewstechnologyblog.blogspot.com/ Matthew Wild] added BOSH support to the [http://camaya.net/gloox gloox] C++ library as part of Google Summer of Code 2007. | ||
Tomas Karasek is adding BOSH support to the [http://gajim.org/ Gajim] client as part of Google Summer of Code 2008 | Tomas Karasek is adding BOSH support to the [http://gajim.org/ Gajim] client as part of Google Summer of Code 2008 ([http://tomk-soc08.blogspot.com/ blog]). |
Revision as of 03:46, 11 June 2008
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
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 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 (blog).