我必须构建一个Client/Server应用程序,其中服务器端只是一个将数据从一个客户端传递到另一个客户端的应用程序。
客户端将用C#编写,如果可能的话,我想用NodeJS编写服务器。我会尽力解释这背后的想法。
如果您将此应用程序视为1vs1游戏,最好对此进行解释。因此,多个客户端可以连接到一个Async
服务器。在Player1/Player2上下文中,一个客户端将与另一个客户端匹配。
Player1可以进行"移动"。例如,POCO
将被转换为JSON
格式。然后将数据发送到服务器,服务器应该知道应该向哪个对手(Player2)发送数据。作为回报,Player2可以移动,然后新数据将通过服务器发送回Player1。
因此,服务器需要有一个所有连接的玩家/客户端的列表。所以它可以跟踪玩家玩什么、谁玩、他们的分数等等。基本上,这是一个无状态的环境。
我一直在考虑用SocketAsyncEventArgs
类用C#编写服务器。但由于NodeJS/Socket.IO已经是一个优化的lib,如果我能在其中完成,那将节省时间。
我只需要知道在NodeJS中是否可以做到这一点。还是应该坚持使用C#服务器?
Okey,
我认为,如果您在C#端使用SocketIO4Net.Client之类的东西来打开与node.js服务器的连接,这是可能的。
来自文档:
SocketIO4Net.Client可以在类似于Socket.IO JavaScript客户端。本项目旨在填补Socket.IO的JavaScript客户端和C#客户端的空白,并保留非常相似的应用程序体验。
为了在服务器上存储玩家列表等,这很容易。您将javascript对象定义为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,那么值得考虑的是,你总是将你的单独游戏伙伴添加到服务器的不同房间。因此,交换信息只能在相关参与者之间传播。参见插座.io房间
至于下一步该去哪里的资源:最好的选择是在谷歌上搜索"带socket.io的多人游戏",它会给出各种各样的结果。就像这样:如果你对node.js完全陌生,那么用node.js构建多人游戏可能会更好。
注意:如果你不了解基础知识,也没有尝试过用node.js编程,你还没有准备好制作多人游戏,那就一步一步来吧。!(是的,我现在按照你的指示从游戏的角度来看这个问题,但游戏的行为也可以应用于许多应用程序)。干杯