2014-02-18 29 views
1

我必須構建一個客戶端/服務器應用程序,其中服務器端只是將數據從一個客戶端傳遞到另一個客戶端的應用程序。NodeJS的非無狀態套接字解決方案

客戶端將用C#編寫,我想在NodeJS中編寫服務器(如果可能的話)。我會試着解釋這個背後的想法。

如果您將此應用程序看作1vs1遊戲,最好解釋一下。所以多個客戶端可以連接到一個Async服務器。一個客戶端將與另一個客戶端匹配,如在Player1/Player2上下文中。

Player1可以做出「移動」。例如,POCO將被轉換爲JSON格式。然後這將被髮送到服務器,並且服務器應該知道應該向哪個對手(玩家2)發送數據。然後作爲回報,玩家2可以進行移動,然後新的數據將通過服務器發送回玩家1。

所以服務器需要有一個所有連接的球員/客戶端的列表。因此,它可以跟蹤玩家的比賽和誰以及他們的得分等。基本上,這是一個無國籍的環境。

我一直在考慮在C#中用SocketAsyncEventArgs類寫作服務器。但是由於NodeJS/Socket.IO已經是一個優化的庫,如果我能做到的話,這將節省時間。

我只需要知道是否可以在NodeJS中執行此操作。或者我應該堅持一個C#服務器?

+0

嗯..你提到的服務器需要具備的所有球員名單等,並跟蹤得分..這不是一個無狀態的環境。 :) –

+0

@MaunoV。這就是爲什麼標題是「A **不是**無狀態套接字解決方案」的原因。換句話說,它不應該是無狀態的,因爲我相信NodeJS現在是。所以,這正是我所要求的:) – Vivendi

+0

嘛。這是一件容易的事與我的NodeJS我目前正在寫我自己的多人遊戲,以它的上面,但我只是不清楚如何才能打開socket.io想通過C#連接。我目前沒有這些信息。 –

回答

1

歐凱,

我認爲這是可能的,如果你使用像SocketIO4Net.Client在你的C#側打開連接到你的node.js服務器。

從文檔:

SocketIO4Net.Client可以在一個非常 方式Socket.IO JavaScript客戶端類似與Socket.IO實例進行交互。這個項目旨在將 填充爲Socket.IO的JavaScript客戶端和C#客戶端的差距,並保留 一個非常相似的應用程序經驗。

並且爲了在服務器上存儲玩家列表等等,這很容易。您可以在其中添加連接的客戶端並使用例如socket.id作爲標識符來定義javascript對象,如players

// Players currently at server 
var players = {}; 

你這樣做通常監聽套接字connection事件,例如:

... somewhere in your code ... 

var io = require('socket.io').listen(httpServer); 

... somewhere in your code ... 

// run on new client connection.. 
io.sockets.on("connection", function (socket) { 

    // adding to list of players you have in your server 
    // Player can be your own declared class as you like it to be 
    players[socket.id] = new Player({ 
     nickname: "playerNameExample" 
    }); 

}); 

然而,如果你的遊戲更像是牽線搭橋1VS1這將是值得考慮的是,你永遠是你添加將不同的玩家分開到服務器的不同房間。所以交換消息只能在相關參與者之間傳播。看到socket.io rooms

至於下一步的資源:最好的選擇是谷歌「與socket.io多人遊戲」,這將帶來各種各樣的結果。就像這樣:Building-multiplayer-games-with-nodejs如果你對node.js是全新的,那麼用node.js搜索hello world可能會更好。

由於注:如果你不知道的基本知識,並沒有嘗試過用編程Node.js的東西你不準備一步,使工作多人遊戲,先行一步! (是的,我現在從遊戲的角度看這是您的說明,但遊戲的行爲可以被應用到許多應用程序,以及)。乾杯。

+0

謝謝這個幫助很大。我知道從這裏走到哪裏:) – Vivendi

相關問題