java - 多线程套接字服务器 - 客户端相互通信

标签 java c# sockets unity-game-engine server

我有一个问题困扰着我,想与您分享,也许有人有答案或解决这个问题的方法。

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

我想象保存一个连接到服务器的所有客户端的列表,每个客户端都有其句柄,到目前为止一切都很好,但是我怎么能看到每个连接的客户端都在做不同的事情呢?这意味着每秒我都会获取客户端服务器的 Activity 客户端列表和所有状态?在我看来,如果考虑到很多用户,这似乎有点沉重。

想象一下,你正在玩一个在线游戏,突然出现一个新玩家,你所看到的都是行走、奔跑、打击、跳跃、滚动,因此又出现了一个,又一个,我是否得到了大量的数据包来告诉我每个用户连接以及他们在做什么,或者我对问题的看法是错误的,而且事情更简单?

我已经很欣赏这些答案了:)

最佳答案

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

关于java - 多线程套接字服务器 - 客户端相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421641/

相关文章:

java - ArrayList<E>.clear() 的用处?

c# - 如何在 C# 中执行 DragAcceptFiles?

c# - Winforms 设计器 : Possible to programmatically achieve Project Variables?

c# - 在 Windows 服务中异步运行外部进程

c - 如何通过套接字发送 XDR 结构内的数组

java - Spring 绑定(bind)结果错误

java - 当我用Stanford CoreNLP重新训练情感模型并与相关论文的结果进行比较时,我得到了不同的结果

c++ - SSL_connect() 产生证书验证失败

macos - MAC 中的 TCP 客户端使用 C++

java - 如何合并同一个非常大的项目的2个版本