2013-08-19 61 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套接字來做到這一點。