如何确定套接字中的变量是否匹配

时间:2015-04-01 14:13:34

标签: javascript node.js sockets

我有一个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,因此是相等的。有没有更好的方法来检查主机和响应器是否准备就绪?

1 个答案:

答案 0 :(得分:1)

很抱歉告诉你,但代码逻辑有点混乱。

msg.Entity应该有一个值" Host"或者"响应者",因此变量nameHostnameResponder将永远不会相同,因为两者都被设置在不同的if条件下。

如果您尝试在if条件之外设置nameHostnameResponder,则两者都是相同的,因为它们被分配到相同的对象属性msg.Name。< / p>

你真的需要再次完成逻辑。