Difference between revisions of "Bidirectional-streams Over Synchronous HTTP (BOSH) (XEP-0124)"

From XMPP WIKI
Jump to navigation Jump to search
 
m
 
Line 2: Line 2:
  
 
==Overview==
 
==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])
+
[http://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://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://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://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.
 
Possible utilization is in web-based XMPP applications or as an option for users behind restrictive firewalls.
Line 9: Line 9:
 
===Servers===
 
===Servers===
 
Servers with built-in Connection Manager.
 
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.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.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.
Line 16: Line 15:
 
===Standalone Connection Managers===
 
===Standalone Connection Managers===
 
Act as a proxy between client and XMMP server.
 
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://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://www.butterfat.net/wiki/Projects/PunJab Punjab] - Python and Twisted again.
Line 42: Line 40:
  
 
==Discussion==
 
==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].
 
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].
  
Line 48: Line 45:
 
[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 ([http://tomk-soc08.blogspot.com/ blog]).
+
[http://tomk-soc08.blogspot.com/ Tomas Karasek] is adding BOSH support to the [http://gajim.org/ Gajim] client as part of Google Summer of Code 2008.
  
 
[http://gsoc.safasofuoglu.org/ Safa SofuoÄŸlu] updated and improved BOSH support of the [http://www.igniterealtime.org/projects/openfire/index.jsp Openfire] and [http://www.igniterealtime.org/projects/xiff/ XIFF] as part of Google Summer of Code 2008.
 
[http://gsoc.safasofuoglu.org/ Safa SofuoÄŸlu] updated and improved BOSH support of the [http://www.igniterealtime.org/projects/openfire/index.jsp Openfire] and [http://www.igniterealtime.org/projects/xiff/ XIFF] as part of Google Summer of Code 2008.

Latest revision as of 22:43, 27 January 2010

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.

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
  • agsXMPP (.NET / c# / Mono)
  • MatriX (Silverlight c#)

Connection Manager.

  • XMPP4GWT - Java library for Google Web Toolkit framework
  • XIFF (Flex/ActionScript)

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.