我有一个node.js服务器,我使用socket.io在两个html页面之间进行通信。两个html页面通过套接字发送数据,每个页面都有一个与之关联的实体,例如主机是Entity: 'Host'
和响应者反之亦然。他们都有一个与他们相关联的名称,这与他们为会话保持'配对'相同,例如Name: 'test'
。
当服务器接受这些连接时,我很难找到是否有设置。目前我所拥有的是:
socket.on('hostResponderStatus', function(msg)
{
if(msg.Status == 'Connecting')
{
if(msg.Entity == 'Host')
{
nameHost = msg.Name; //Grab the Name associated with the host
socket.emit('StaringGL', {Status: 'Starting', Name: nameHost}); //Send back a socket stating gl is starting
}
if(msg.Entity == 'Responder')
{
nameResponder = msg.Name; //Grab the Name associated with the responder
socket.emit('StaringGL', {Status: 'Starting', Name: nameResponder}); //Send back a socket stating gl is starting
}
if(msg.Name == nameHost && msg.Name == nameResponder) // if the names are the same start the child service
{
console.log("host name: "+nameHost);
console.log("host name: "+nameResponder);
var child_info = child.fork(__dirname + '/child_proccess/Child');
child_info.send({Name: nameHost});
}
}
});
但我认为它永远不会到达最后一个if语句,因为'host'和'responder'都进入了自己的if子句,当它们完成套接字后再也不会被访问。我尝试将if子句放入app.js的主体中,如下所示:
if(nameHost == nameResponder)
{
var child_info = child.fork(__dirname + '/child_proccess/Child');
child_info.send({Name: nameHost});
}
但是当节点启动时会不断触发,因为它们都是null,因此是相等的。有没有更好的方法来检查主机和响应器是否准备就绪?
答案 0 :(得分:1)
很抱歉告诉你,但代码逻辑有点混乱。
msg.Entity
应该有一个值" Host"或者"响应者",因此变量nameHost
和nameResponder
将永远不会相同,因为两者都被设置在不同的if条件下。
如果您尝试在if条件之外设置nameHost
和nameResponder
,则两者都是相同的,因为它们被分配到相同的对象属性msg.Name
。< / p>
你真的需要再次完成逻辑。