2013-08-19 112 views
4

这个问题可能过于宽泛,但我认为这是一个体面的问题,我不知道如何处理它。node.js网络服务器和C++游戏服务器

我目前在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++程序,并且我完全不知道如何执行此操作。

任何人都可以帮助我吗?

+0

这可能很老了,但请您简要提一下您想从nodejs迁移到C++的原因?它慢吗? – Syd

+0

哈哈,这是旧的,不是吗?我不记得确切的原因,但它是一个宠物项目,所以我当时可能只是想练习C++。 –

+0

Okies,thnx为你的答案我正在考虑在nodejs中编写一个游戏服务器,并提出了这篇文章,所以我想问你:) – Syd

回答

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); 
2

首先,可以选择将客户端直接连接到C++服务器。例如,如果您的socket.io传输是websocket,则可以使用http://libwebsockets.org(服务器端的C++ websockets库)。否则,您可以让您的客户端将socket.io连接到您的node.js服务器,并在您的C++服务器和node.js服务器之间建立一些简单的通信。不要试图“将socket.io传递给C++服务器”:只需让C++服务器和node.js服务器在它们自己之间进行通信,来回传递消息,了解玩家的状态:C++将处理逻辑,node.js会做实际的发送和接收。例如,你可以用一个简单的TCP套接字来做到这一点。