Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 套接字服务器2服务器连接_Javascript_Node.js_Sockets - Fatal编程技术网

Javascript 套接字服务器2服务器连接

Javascript 套接字服务器2服务器连接,javascript,node.js,sockets,Javascript,Node.js,Sockets,与HTTP不同的是,套接字没有任何是req,res的内容,它总是像: client.on('data', function(data)... 事件在流上有数据时执行 现在我想做一个服务器2服务器通信。我正在写一个游戏,我将有一个主服务器,这个主服务器与游戏桌面客户端通信 一个服务器是世界服务器,另一个是登录服务器。客户机直接连接到世界服务器,如果数据是登录数据,则世界服务器将其传递给登录服务器 但我无法在node中思考如何执行此操作。作为以前的webdev,我只能想到: login.send(

与HTTP不同的是,套接字没有任何是
req,res
的内容,它总是像:

client.on('data', function(data)...
事件在流上有数据时执行

现在我想做一个服务器2服务器通信。我正在写一个游戏,我将有一个主服务器,这个主服务器与游戏桌面客户端通信

一个服务器是世界服务器,另一个是登录服务器。客户机直接连接到世界服务器,如果数据是登录数据,则世界服务器将其传递给登录服务器

但我无法在node中思考如何执行此操作。作为以前的webdev,我只能想到:

login.send(dataToSendToOtherServer, function(responseOfOtherServer) {
   if (responseOfOtherServer === 1)
     client.write(thisDataIsGoingToTheDesktopClient)
})
那么如何对node.js中的套接字执行类似的操作呢

我试过这样的方法:

Client.prototype.send = function(data, cb) {
  // convert json to string
  var obj = JSON.stringify(data)
  this.client.write(obj)

  // wait for the response of this request
  this.client.on('data', function(req) {
    var request = JSON.parse(req)

    // return response as callback
    if (data.type === request.type) cb(request)
  })

}

但是每个请求的响应都是+1。

因为您处理的是普通的TCP/IP,所以您需要制定自己的更高级别的协议来指定诸如如何确定消息何时完成之类的事情(因为TCP不能保证消息一下子就到达)。处理这一问题的常见方法有:

  • 固定长度消息:缓冲接收到的数据,直到其长度正确
  • 在每条消息前面加上长度计数:缓冲接收到的数据,直到达到指定的长度
  • 指定某些字符或序列作为消息结束指示器:缓冲接收到的数据,直到它以该序列/字符结束

在您的情况下,您可以缓冲接收到的数据,直到
JSON。假定每条消息都由合法的JSON组成,则对累积的数据成功解析。

Yes我的数据包在第一个字节处具有数据包的总长度。现在我能做什么呢?实际上json部分只是一个例子。我的真实数据是一个缓冲区。或者你认为像RPC或者所有服务器从队列中读取数据的队列这样的东西是它们之间通信的一种更好的方式吗?我只是在搜索时发现的,我从来没有尝试过,也不熟悉这些。