【问题标题】:Multi Thread Socket Server - clients talking to each other多线程套接字服务器 - 客户端相互交谈
【发布时间】:2016-09-22 03:26:17
【问题描述】:

我有一个问题想和你分享,也许有人有答案或解决这个问题的方法。

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

我想保留一个连接到服务器的所有客户端的列表,每个客户端都有自己的句柄,到目前为止一切都很好,但是我怎么能看到每个连接的客户端都在做不同的事情呢?这意味着当我获得客户端的活动客户端服务器列表和所有状态时,每一秒都可以这么说?如果考虑到许多用户,我的脑海中似乎有些沉重。

想象一下,你正在玩一个在线游戏,突然出现一个新玩家,你看到的都是走路、跑步、罢工、跳跃、翻滚,因此又出现了一个,另一个,我是否会收到大量数据告诉我每个用户连接,他们在做什么,还是我对问题的看法有误,事情更简单?

我已经很欣赏答案了:)

【问题讨论】:

  • 提示:google socket.io
  • 多久更新一次?您会发现更新比看起来更周期性和本地化。

标签: java c# sockets unity3d server


【解决方案1】:

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

【讨论】:

  • 我看到一篇文章解释了一点。就像他们在区域中映射游戏一样,所以如果我在区域 1 中,并且同一区域中有更多玩家,服务器会向每个客户端发送一个数据包,其中包含该区域中的所有玩家状态。我觉得这听起来有点沉重,但我想不出任何其他解决方案
  • @Steffano - 服务器甚至不必将区域内所有玩家的详细信息发送给您 - 只有在您的视野中的玩家才需要,这通常要小得多。
猜你喜欢
  • 2014-10-06
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多