Hey Esteban, Since you seem to need to scale to 1000s of concurrent connections, I would go for option 2. RabbitMQ will then work as a demultiplexer and you gain options for using more than one Pharo worker for processing traffic, if that ever becomes necessary. BTW, I never heard of MQTT and it seems pretty interesting, thanks ! I will read about it tonight. Sven
On 19 Nov 2014, at 19:06, Esteban A. Maringolo <emaringolo@gmail.com> wrote:
Hi,
I'll be needing to add bidirectional messaging to our current Android (Java) application, and as usual I'm expecting to manage the server side of the communication with Pharo.
I'm evaluating two alternatives, but I'm in open to other, proven, options.
Option 1. WebSockets Open a WebSocket on each device, and push/retrieve messages from each of these, tracking the device id if I need to recreate a new socket (avoiding recreating new sockets in case of connectivity issues, very common).
Option 2. MQTT [1] This is basically a mobile oriented MQ, super low footprint on mobile. For what I saw, I could implement the server using an intermediate MQ (RabbitMQ) and use STOMP to connect to it.
Option 3. XMPP [3] Provides several features I'll need in the future, like file transfer in addition to regular text messaging. It is very well supported in Android with Smack [4], but I don't know if we have a Pharo server for it, or if somebody ever played with it.
By means of simplicity and use load I favor option 1, because I can understand it better, and as everything moves towards web based technologies, I could implement WAMP [5] on top of that in the future.
Right now I'd need to have a hundred websockets opened at the same time, which doesn't sound like a heavy load to me, but I certainly don't know. In the future it could be an order of magnitude bigger, and that's why I don't discard more complex solutions like XMPP or MQTT.
Regards!
[1] http://mqtt.org/ [2] https://github.com/svenvc/docs/blob/master/neo/stamp.md [3] http://xmpp.org/ [4] http://www.igniterealtime.org/projects/smack/ [5] http://wamp.ws/