现在有一个问题,我要做A到B和B到A一对一的长连接通讯,使用net模块创建了服务器,又使用cluster做负载,现在不知道如何在进程间共享socket,想到了redis存储连接,但是在序列化socket的时候报错,请问有谁做过类似的功能啊??
JSON.parse 中 function是不能被共享的。 单进程对应单SOCKET即可。跨进程分享SOCKET是画蛇添足吧?
如果一定要实现进程间通信 process模块和child_process模块你去看一看
process.on('message', function(m) {
console.log('CHILD got message:', m);
});
process.send({ foo: 'bar' });
@MiguelValentine 现在是这样,A的连接由进程1管理,B的连接由进程2管理,如果我A给B发消息,服务器如何找到B呢?不知道我描述的是否准确。
@BrotherPeng 如何区分A和B的连接?
@MiguelValentine 是啊,不知道有没有socketid之类的
@lonso 我没有使用websocket,要是websocket应该好说吧
@BrotherPeng 知道你的意思了。socketio也不支持CLUSTER多核。
但是我有解决思路。
process模块 A的进程向主线程抛出一个任务类似 {do:‘send’,user:‘B’,info:‘balabala’} 所有线程收到这个事件,检索自己的连接池内是否存在用户B,存在则该连接池调动SEND方法,发送INFO数据。
@MiguelValentine 你的意思是主进程给所有子进程发消息,子进程在当前所有长连接内找到接收者是吧?可以试试,但是似乎redis作用不太大了,只有维护双方关系了
@BrotherPeng 你如果还想用REDIS,就要涉及到REDIS广播那块了。还不如我说这种方法的性能呢。