不知道哪位兄弟做过,能否指点下
- session外存储,比如使用redis,这样多节点间可以共享
- 负载均衡使用nginx,转发请求到各个node chat节点
- redis存储用户基本信息,如状态信息、好友关系
- node chat节点间通信使用redis的pub/sub
- 前端使用socket.io或者自己封装长连接
- 做好客户端断开重练和服务端node chat节点的动态增删
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就是最新的。
thrift通信
@halfblood 是这样的,但也不可能给session存取加锁,那就没意义了,所以尽量不放临界,并且系统可容忍适当修改.