Bidirectional-streams Over Synchronous HTTP (BOSH) (XEP-0124)

From XMPP WIKI
Jump to navigation Jump to search

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.