I researched existing HTTP Binding implementations for testing my code with different servers and Connection Managers. BOSH, described in XEP-0124 and XEP-0206, provides mechanisms for reliable XML stream transfer over HTTP. XEP-0124 covers general syntax and error handling, while XEP-0206 addresses session negotiation, error processing, and SASL authentication for XMPP.
In the BOSH architecture, there are clients, servers, and Connection Managers. Clients communicate with the Connection Manager (CM) through HTTP POST requests/responses defined in the mentioned XEPs. The CM, acting as an XMPP client or using the component protocol, communicates with the XMPP server. The CM can be a standalone HTTP server or a built-in feature/extension of an XMPP server. To connect to an XMPP server via BOSH CM, you need the CM URL and port number in addition to the XMPP server address and port. If using built-in Connection Managers, the IP addresses of the XMPP server and CM will be the same, differing only in port numbers.
Here's an overview of XMPP software with BOSH support:
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. Offers SASL mechanisms in initial response, so XEP-0206 is supported as well.
- Tigase Server - BOSH support since 3.0.2
Act as a proxy between client and XMMP server.
- Araneo - Minimal CM written in Python using Twisted. I found the link on MattJ's blog
- Punjab - Python and Twisted again.
- rhb - CM in Ruby.
- JabberHTTPBind - Java servlet implementing XEP-0124.
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.
While I haven't tested all the listed software, I'll continue updating this overview during the summer as I progress with testing. For further reading, refer to MattJ's blog post.
3 comments:
Hi Thomas,
Look at this client : http://code.google.com/p/emite/
emite is great! there is also soashable, which I stumled upon a while ago.
keep up the good work, Tomas!
thanks for the link Safa
Post a Comment