NodeJS的一个没有无状态的套接字解​​决scheme

我必须构build一个客户端/服务器应用程序,其中服务器端只是将数据从一个客户端传递到另一个客户端的应用程序。

客户端将用C#编写,如果可能的话,我想在NodeJS中编写服务器。 我会试着解释这个背后的想法。

如果您将此应用程序看作1vs1游戏,最好解释一下。 所以多个客户端可以连接到一个Async服务器。 一个客户端将与另一个客户端匹配,如在Player1 / Player2上下文中。

玩家1可以做一个“移动”。 例如, POCO将被转换为JSON格式。 然后发送给服务器,服务器应该知道应该向哪个对手(Player2)发送数据。 然后作为回报,玩家2可以移动,然后新的数据将通过服务器发送回玩家1。

所以服务器需要列出所有连接的玩家/客户。 所以它可以跟踪玩家的游戏方式,以及他们的分数和分数等。基本上,这是一个无国籍的环境。

我一直在考虑用SocketAsyncEventArgs类在C#中编写服务器。 但是由于NodeJS / Socket.IO已经是一个优化的库,如果我能做到的话,这将节省时间。

我只需要知道是否有可能在NodeJS中做到这一点。 或者我应该坚持一个C#服务器?

奥基,

我认为,如果你在C#端使用类似SocketIO4Net.Client的东西来打开连接到你的node.js服务器是可能的。

从文档:

SocketIO4Net.Client可以以与Socket.IO JavaScript客户端非常相似的方式与Socket.IO实例交互。 该项目旨在填补Socket.IO的JavaScript客户端和C#客户端的空缺,并保留非常类似的应用程序体验。

并且为了在服务器上存储玩家列表等的目的,这很容易。 您可以像添加连接的客户端一样定义javascript对象,例如使用socket.id作为标识符。

 // 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房间

至于下一步的资源:最好的select是谷歌“与socket.io多人游戏”,这将给出各种各样的结果。 就像这样:如果你是全新的node.js,使用node.jssearchhello world, build立多人游戏与nodejs可能会更好。

应有的注意事项:如果你不了解基本知识,也没有尝试用node.js编程,那么你还没有准备好开发多人游戏,一步一步地进行。 (是的,我现在正按照你的指示从游戏的angular度看这个,但游戏的行为也可以应用到很多应用程序)。 干杯。