这个问题可能太宽泛了,但我认为这是一个不错的问题,我不知道如何处理。
我目前正在example.com上托管一个网站。目前我正在使用100%node.js。我还主持了一个使用socket.io
的网络HTML5游戏(在game.example.com上),这太棒了,但我决定更愿意使用C++(或者可能是Java)来处理游戏服务器,并计划将服务器逻辑从JavaScript翻译过来。
我目前最大的问题是,我根本不知道如何连接WebSocket。我仍然计划使用node.js为完整的客户端(HTML和JavaScript)提供服务,但我希望客户端连接到C++服务器,而不是node.js服务器。
我当前连接到服务器的方式只是使用从socket.io的io.connect();
获得的套接字。我认为这是可以保留的,我只需要将服务器端的套接字从node.js传递到我的C++程序,我完全不知道如何做到这一点。
有人能帮我吗?
假设我理解正确,您希望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);
首先,可以选择将客户端直接连接到C++服务器。例如,如果你的socket.io传输是websockets,你可以使用http://libwebsockets.org(用于服务器端的C++websockets库)。
否则,您可以让客户端将socket.io连接到node.js服务器,并在C++服务器和node.js server之间建立一些简单的通信。不要试图"将socket.io转移到C++服务器":只需让C++服务器和node.js服务器之间进行通信,来回传递关于玩家状态的消息:C++将处理逻辑,node.js将进行实际的发送和接收。例如,您可以使用一个简单的TCP套接字来实现这一点。