Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ws-library连接加倍_Javascript_Node.js_Express_Websocket_Ws - Fatal编程技术网

Javascript ws-library连接加倍

Javascript ws-library连接加倍,javascript,node.js,express,websocket,ws,Javascript,Node.js,Express,Websocket,Ws,我的连接有问题,我有一个express server并创建了一个ws实例传递express server实例,当我连接时,连接成功并尝试发送一条消息,我可以接收一次消息,当我关闭连接,再次连接,然后发送一条消息,消息现在发送两次,每次a继续这样做,消息保持两倍,我在通道上的套接字只是一个连接,我想它创建了一个新的进程?如何防止这种行为 /** *新WebScoket实例初始化 *@型网袋 */ const ws=new WebSocket.Server({/*verifyClient,*/Se

我的连接有问题,我有一个express server并创建了一个
ws
实例传递express server实例,当我连接时,连接成功并尝试发送一条消息,我可以接收一次消息,当我关闭连接,再次连接,然后发送一条消息,消息现在发送两次,每次a继续这样做,消息保持两倍,我在通道上的套接字只是一个连接,我想它创建了一个新的进程?如何防止这种行为

/**
*新WebScoket实例初始化
*@型网袋
*/
const ws=new WebSocket.Server({/*verifyClient,*/Server});
log('instantiate');
const rooms={};
/**
*添加新集合
*@param{String}房间
*@param{String}通道
*@param{Object}套接字
*@returns{Undefined | Null}
*/
功能添加(房间、频道、插座)
{
如果(房间类型[room]=='undefined')房间[room]={};
如果(房间类型[房间][通道]='undefined')房间[房间][通道]=[];
如果(房间类型[房间][频道]!=“未定义”)房间[房间][频道]。按(插座);
订阅(`${room}-${channel}`);
返回;
}
/**
*向套接字添加新属性
*@param{String}房间
*@param{String}通道
*@return{Object}
*/
功能添加ProptoSocket(房间、频道)
{
返回{房间,频道};
}
/**
*向用户发送消息
*@param{String}房间
*@param{String}通道
*@param{String}msg
*@param{Object}套接字
*@return{void}
*/
功能发送(房间、频道、消息、插座)
{
如果(房间类型[房间]=‘未定义’)返回;
如果(房间类型[房间][频道]==“未定义”)返回;
房间[房间][频道].forEach(用户=>{
//if(user!==socket&&user.readyState===WebSocket.OPEN)user.send(msg);
如果(user.readyState==WebSocket.OPEN)user.send(msg);
});
}
/**
*从文件室中删除用户
*@param{String}房间
*@param{String}通道
*@param{Object}套接字
*@return{void}
*/
功能室(房间、通道、插座)
{
如果(房间类型[房间]=‘未定义’)返回;
如果(房间类型[房间][频道]==“未定义”)返回;
房间[房间][频道]=房间[房间][频道].过滤器(用户=>用户!=插座);
//取消订阅(`${room}-${channel}`);
}
//@连接套接字连接事件
ws.on('connection',函数连接(socket,req){
socket.isActive=true;
常量f=formatSocketUrl(请求url);
套接字['props']=addPropToSocket(…f);
添加(…f,套接字);
on('message',msg=>send(…f,msg,socket));
socket.on('pong',()=>socket.isActive=true);
socket.on('close',()=>{
rm(插座、道具、房间、插座、道具、通道、插座);
});
redis.on('消息',(频道,消息)=>{
常数f=通道分割('-');
发送(…f,msg,socket);
});

});抱歉,我的坏消息出现在我的redis中。subscribe()它在创建新连接时会继续订阅,因此将触发多个订阅事件。请检查筛选条件是否可能不起作用