4

这个问题可能太宽泛了,但我认为这是一个不错的问题,我不知道如何处理它。

我目前在 example.com 托管一个网站。目前,我正在使用 100% node.js 执行此操作。我还托管了一个使用 的联网 HTML5 游戏(在 game.example.com)socket.io,这很棒,但我决定我宁愿使用 C++(或者可能是 Java)来处理游戏服务器,并计划翻译来自 JavaScript 的服务器逻辑。

目前我最大的问题是我根本不知道如何连接 WebSocket。我仍然计划使用 node.js 为完整的客户端(HTML 和 JavaScript)提供服务,但我希望客户端连接到 C++ 服务器而不是 node.js 服务器。

我目前连接到服务器的方式只是使用从 socket.io's 获得的套接字io.connect();。我认为这可以保留,我只需要将服务器端的套接字从 node.js 传递到我的 C++ 程序,我完全不知道该怎么做。

谁能帮我?

4

2 回答 2

5

假设我对您的理解正确,您希望 Node 处理常规 HTTP 请求,但您想将 Websocket 请求传递给您的 C++ 服务器?尝试在 Node 中使用代理来处理升级请求:

var http = require('http'),
    httpProxy = require('http-proxy');

//have your c++ server for websockets operating on port 1333
var proxy = new httpProxy.HttpProxy({
  target: {
    host: 'localhost',
    port: 1333
  }
});

var server = http.createServer(function (req, res) {
    //handle normal requests in here
});

server.on('upgrade', function (req, socket, head) {
  // Proxy websocket requests...
  proxy.proxyWebSocketRequest(req, socket, head);
});

server.listen(80);
于 2013-08-19T09:52:14.337 回答
3

首先,可以选择将您的客户端直接连接到您的 C++ 服务器。例如,如果您的 socket.io 传输是 websockets,您可以使用http://libwebsockets.org(用于服务器端的 C++ websockets 库)。

否则,您可以让您的客户端将 socket.io 连接到您的 node.js 服务器,并在您的 C++ 服务器和 node.js 服务器之间建立一些简单的通信。不要试图“将 socket.io 处理到 C++ 服务器”:只需让 C++ 服务器和 node.js 服务器在它们之间进行通信,来回传递有关玩家状态的消息:C++ 将处理逻辑,并且 node.js 将执行实际的发送和接收。例如,您可以使用简单的 TCP 套接字来做到这一点。

于 2013-08-19T06:42:36.417 回答