24
votes

I'm trying to figure out how XMPP works (total beginner in protocols in general) and I want to set up a server.

So far, I saw 3 main challengers :

  • ejabberd
  • openfire
  • prosody

I checked on some website and on the wikipedia, but I cannot see pros and cons about all of them.

Where could I find some understandable informations ?

PS : if context is somehow important, I want to set my server on my personnal raspberry pi (so not that much processing power), and my ultimate goal is to use XMPP for a little android app using google cloud messaging

4
Ease-of-modern-setup is not covered by the answers below: There is a straightforward tutorial on how to set up ejabberd+Nextcloud on Raspberry Pi with 100% "modern XMPP compliance" at github.com/jsxc/xmpp-cloud-auth/wiki/raspberry-pi-enMarcel Waldvogel

4 Answers

17
votes

My Top XMPP server software

Top: Statistical use

  • 1) Ejabberd (61.6279%)
  • 2) Prosody (17.0543%)
  • 3) OpenFire (7.36434%)

Top: Multi-core use

  • 1) Ejabberd and Openfire

  • 2) --- !

Top: Memory usage

  • 1) Prosody
  • 2) Ejabberd
  • 3) Openfire

Top: Web-admin

  • 1) Openfire

  • 2) Ejabberd

  • 3) no (default)

Top: Programming language

  • 1) Openfire (Java) and Prosody (Lua)

  • 2) Ejabberd (Erlang)


Personnal / Raspberry pi / ejabberd vs openfire vs prosody = (‎My choice) Prosody


Statistical use (Russian Wiki):

http://jabberworld.info/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%89%D0%B8%D1%85_%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2_Jabber

Review (Russian Wiki):

http://wiki.404.city/%D0%94%D0%B6%D0%B0%D0%B1%D0%B1%D0%B5%D1%80

16
votes

Having been involved in testing an open-source XMPP web client (JSXC) against ejabberd and Prosody, I have noticed the following differences. Please note that I have done more with ejabberd, so there will naturally be more nitpicking, but also more praise.

Ejabberd

Pros

  • The mechanisms that have been implemented are typically rock-solid, probably due to the fact that a company is behind it, offering services which require this quality.
  • With the ejabberdctl and the admin web interface, it is possible to configure many things while the process is running. Even if you need to touch the config files heavily, reloading them does the right thing without an interruption.
  • ejabberd can easily be turned into a cluster for reliability or performance
  • Comes with a built-in STUN/TURN server
  • Shared roster groups are very powerful, but also need getting used to.

Cons

  • The documentation is mostly option-based, i.e. options are described, similar to a manual page. There are few examples and even fewer descriptions of how the options interact, what would be the best practice usage, or actually where you would put the option, especially in a virtual hosting environment.
  • If you want to extend ejabberd, you need to be able to grasp Erlang, a very powerful language, but with quite a few differences to the programming languages most beginners learn.
  • External Service Discovery (extdisco) is not (yet) supported either.

Prosody

Pros

  • Has a lot of community modules, due to the easier accessibility of the Lua programming language.
  • As a pure community project, if you want to invest time, you really can shape the project.
  • Does support extdisco (requires less client configuration) and mam:2 (better supported by clients)

Cons

  • Some modules (for me, the most notable was the external authentication mechanism) are unreliable.
  • Has to be restarted for more configuration updates, i.e., clients will be disconnected and have to reconnect, typically causing has gone offline/come online notifications to the users. [Update: I did know about mod_reload_modules, which would have avoided some or these restarts. Thanks, drs!]
  • No persistence for PEP/PubSub (Personal Eventing Protocol; Publish-Subscribe) data. This makes it unusable for both bookmarking (e.g., multi-user chats) and XMPP-based social networks such as Movim
8
votes

If you are running your server on RaspberryPI i would choose Prosody. It is very lightweight and written in Lua.

Openfire is java and needs a good amount of resources to run, even in a small environment.

There are lots of minimalistic alternatives out there, but it all depends on what level of functionality you are seeking.

0
votes

If you are a newbie to XMPP server setup/Lua (or the compliant programming language), I'd suggest you to go for Openfire. The web admin console makes setup very simple. There are multiple plugins for various different needs. But please note that Openfire reserves >1GB of memory for itself.