After a great deal of looking, I think I finally found a nearly perfect combination of software for web-based chat. In some ways it’s a bit of a throwback, but mostly, it’s really clean and user friendly.
On the back end, I installed the ejabberd XMPP/Jabber server. This beast is great. It required minimal work to get it installed on a Ubuntu or Debian box, had its owd distributed database, and was cluster ready if I need it later.In addition, it uses a web based admin interface which can make life easier when it comes time to do routine maintenance. On top of that, it takes very little in the way of server resources – which is very good.
On the front end, I’m using JWChat, a web based Jabber client. First, it’s a full Jabber client, with most of the bells and whistles. Second, it doesn’t use PHP, Java, or anything else on the server side. The only thing it needed was a bit of mod_proxy configuration to allow access to the http polling interface of ejabberd. After that, it uses AJAX and XML-HTTP request to do all the real work on the client side. While the server load is higher than you would get with a full-client setup, the administration is easier. In the end, it’s probably a wash. Its big advantage, though, is that it’s available from anybody’s borrowed PC with a web browser. It also works great in Internet cafe type setups.
Note for Debian/Ubuntu:
When you enable mod_proxy, you need to put the following in the virtual host config for the virtual host serving JWChat:
Order deny, allow
Allow from all
ProxyPass /http-poll/ http://127.0.0.1:5280/http-poll/
This is slightly different from the setup documented on the JWChat site, because by default mod_proxy is tightly locked down on Debian and Ubuntu. This unlocks mod_proxy to serve as a reverse proxy to that one location without enabling it in the other virtual hosts. Personally, I would recommend running it in its own vhost to give the users a nice URL. (http://jabber.example.com for example) I never understood why sub-domains were not used much more on the Internet.....