多线程套接字服务器 - 客户互相交谈

时间:2016-05-24 18:50:47

标签: java c# sockets unity3d server

我有一个问题是杀了我,想和你分享,也许有人有答案或者有办法解决这个问题。

我在Web开发/桌面API / REST连接和Socket方面有很好的经验。但即使在多线程服务器(无论编程语言)中,所有这些连接始终与连接到服务器的客户端一起工作,请求或发送内容,服务器响应并且如果不再需要则终止连接。事实证明,我一直在看网络游戏(MMO RPG)并且我怀疑,作为连接到服务器的客户端,我如何看到其他客户端,进行交互等...

我想保留一个连接到服务器的所有客户端的列表,每个客户端都有它的句柄,到目前为止一直很好,但是我怎么能看到每个连接做不同的事情?这意味着每一秒都可以这么说,因为我得到了客户端的活动客户端服务器列表以及所有状态的所有状态?在我看来,如果想到很多用户,它似乎有点沉重。

想象一下,你正在玩一个在线游戏,突然出现一个新的玩家,走路,跑步,罢工,跳跃,滚动所有你看到的,因此另一个,另一个,我得到一个庞大的数据包告诉我每个用户连接和他们正在做什么或我在思考问题的错误方面,事情更简单?

我已经很感激答案:)

1 个答案:

答案 0 :(得分:1)

在您的示例中,服务器将您的游戏状态映射到服务器内存中会更有效地进行通信。从那里,它可以将所有连接的玩家映射到您的状态,并向您发送单个集成状态更新,而不是将所有这些玩家连接到您的客户端。当然,很多不同的场景都是可能的。只需将所有额外的玩家合并为一条通信消息并将其发送出去(无需映射您的州本身)是另一种选择。通常,一旦新玩家连接到游戏,服务器只需为所有连接的玩家发送单个合并用户输入。