NodeJS的非无状态Socket解决方案

时间:2014-02-18 10:54:03

标签: c# node.js sockets

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

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

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

Player1可以进行“移动”。例如,POCO将转换为JSON格式。然后将发送到服务器,服务器应该知道它应该发送数据的对手(Player2)。然后作为回报,Player2可以进行移动,然后新数据将通过服务器发送回Player1。

因此服务器需要拥有所有连接的播放器/客户端的列表。因此,它可以跟踪玩家的玩法与他们拥有的人和他们的分数等。基本上,无国籍环境。

我一直在考虑使用SocketAsyncEventArgs类在C#中编写服务器。但是,由于NodeJS / Socket.IO已经是一个优化的lib,如果我可以用它来节省时间。

我只需要知道是否可以在NodeJS中执行此操作。或者我应该坚持使用C#服务器?

1 个答案:

答案 0 :(得分:1)

Okey,

我认为,如果您在C#端使用类似SocketIO4Net.Client的内容,则可以打开与node.js服务器的连接。

来自文档:

  

SocketIO4Net.Client可以与Socket.IO实例进行交互   与Socket.IO JavaScript客户端类似的方式。该项目旨在   为Socket.IO填充JavaScript客户端和C#客户端差距,并保留   一种非常相似的应用体验。

为了在服务器上存储播放器列表等,这很容易。您可以将{j}对象定义为添加已连接客户端的players,并将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 rooms

关于下一步的资源:最好的选择就是google"带有socket.io"的多人游戏这会产生各种各样的结果。就像这样:Building-multiplayer-games-with-nodejs如果你是node.js的新手,那么使用node.js google hello world可能最好先做。

适当的注意事项:如果您不了解基础知识并尝试使用node.js进行任何编程,那么您还没有准备好进行多人游戏,请一步一步地前进。 (是的,我现在从游戏角度看你的指示,但游戏的行为也可以应用于许多应用程序)。欢呼声。