Question

I've been looking into sockjs-tornado recently and am working on a chat function for a social networking site. I'm trying to get a feel for common methods used in building scalable multiroom chat functionality. I'll outline a couple of the methods I've thought of and I'd like to get feedback. What methods are used in the real world? What are the advantages and disadvantages to these methods?

Prereqs:

  • running tornado
  • using sockjs-tornado lib
  • sockjs-client lib for js

Everything else is open.

Methods I've considered:

For loop

This seems like the simplest way to go. You create a user class that subscribes to certain room classes. The user sends a message class that contains a room id and the server redirects the message in the loop only to users that have subscribed to that room. This seems to me to be by far the worst because the complexity is obviously at least linear. (Imagine 500 users connected at once to 5 chat rooms each.)

Multi-tasking/multiple server instances

This also seems like a bad idea because you could have 500 server instances running at any time on... different ports? I'm really not sure on the implementation of this method.

Native support

Now granted, a lot of libraries have this built in such as socketio. However that's not an option due to the sole node.js support. (I'm on tornado server.) Socks in particular does not have built in support for multiple "rooms".

Conclusion

I'm looking for resources/case studies, and industry standards. Any help would be appreciated.

Était-ce utile?

La solution

I would just use a message queue server like RabbitMQ with a fanout exchange as each "chat room". You can see an example of using a fanout exchange in Python here. The Pika AMQP library works with Tornado, too.

The advantage with using a message queueing system is that you can have users connected to different Tornado processes on different servers while still being in the same "room", giving you high availability on the HTTP layer. RabbitMQ also has HA capabilities (although not the greatest).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top