如何用nodejs构建分布式聊天系统
发布于 2年前 作者 haofanlu 2876 次浏览

不知道哪位兄弟做过,能否指点下

16 回复
  1. session外存储,比如使用redis,这样多节点间可以共享
  2. 负载均衡使用nginx,转发请求到各个node chat节点
  3. redis存储用户基本信息,如状态信息、好友关系
  4. node chat节点间通信使用redis的pub/sub
  5. 前端使用socket.io或者自己封装长连接
  6. 做好客户端断开重练和服务端node chat节点的动态增删

pomelo …

https://github.com/NetEase/pomelo/wiki/tutorial1–%E5%88%86%E5%B8%83%E5%BC%8F%E8%81%8A%E5%A4%A9

pomelo 顶起来

pomelo搞这种高实时,分布式的应用太完美了,亲身体验啊!

NB,说的太全面了! 1.session用redis做外存,怎么保证session的同步啊?因为reids的读写都是异步的,而且要经过socket传输,所以不可避免的会出现session不同步的情况。 2.redis当做rpc通信使用,这个想法很有创意,不知道有没有测试过其性能啊?

这也是我之前考虑的问题,不过还没有很好的解决方式……

pomelo有用过的吗,性能怎么样?

多谢,讲的比较详细,不过对redis的pub/sub不太熟,仔细研究下!

@halfblood session里尽量不要存经常变动的信息,而且只有一个节点负责session的话没有同步问题啊,所有客户端都是使用同一个redis节点里的session。redis的pub/sub性能可以啦。

性能挺好的,看你用什么协议了!如果服务器配置还行的话,一般可以撑到协议的上线……

@sumory 一个节点的redis也有同步的问题啊。如果允许用户对session进行修改的话,必然面临着对全局session加锁的考虑啊,不然很容易出现不一致的情况的。

@halfblood 啊?这个不是问题吧。你非要把临界资源放到session里?比如放个count到session,session不用来也不应该用来做这种事情。

多谢各位的分享,我们做的是手游项目,前台用的flash starling框架,后台用php,实时部分打算用nodejs,不知各位有什么好的建议?

@sumory 如果允许用户修改session,即使不是临界资源也会不同步的。比如一个用户连续两个有先后顺序请求,第一个请求对session做了修改,而第二次请求需要获取修改后的session信息。但是session的读写完全是异步的,不能保证第二次请求获取的session就是最新的。

@halfblood 是这样的,但也不可能给session存取加锁,那就没意义了,所以尽量不放临界,并且系统可容忍适当修改.

回到顶部