Networking 服务器和客户端如何正确通信?

Networking 服务器和客户端如何正确通信?,networking,Networking,让我们以第一人称射击游戏为例,服务器必须跟踪玩家的位置、动作、健康状况等。客户端如何向服务器发送这些信息?服务器如何区分客户端发送的是玩家位置还是玩家新健康?我目前正在开发自己的游戏,这是一款在线多人农业游戏,但从概念上讲,服务器将以类似的方式处理 第一个问题是执行问题。例如,我使用套接字通道来区分不同的播放器。例如,当玩家移动时,我将从客户端向服务器发送一个数据包,指示移动(在本例中为新坐标)。该信息通过该玩家的频道发送,并更新该玩家的信息 为了处理多种类型的数据,您需要某种标识符来分隔各种类

让我们以第一人称射击游戏为例,服务器必须跟踪玩家的位置、动作、健康状况等。客户端如何向服务器发送这些信息?服务器如何区分客户端发送的是玩家位置还是玩家新健康?

我目前正在开发自己的游戏,这是一款在线多人农业游戏,但从概念上讲,服务器将以类似的方式处理

第一个问题是执行问题。例如,我使用套接字通道来区分不同的播放器。例如,当玩家移动时,我将从客户端向服务器发送一个数据包,指示移动(在本例中为新坐标)。该信息通过该玩家的频道发送,并更新该玩家的信息

为了处理多种类型的数据,您需要某种标识符来分隔各种类型的信息。。。例如,switch/if语句。这不是很有用,但下面是一些sudo代码,仅供示例

if (packetCode == "Players-Health-Change") {
  player.setHealth(newHealth);
} else if (packetCode == "Players-Location-Change") {
  player.setLocation(newLocation);
}
但是,它非常特定于您想要在什么上运行系统以及体系结构。我建议买一本关于这个主题的书/教程

有用的链接:

简言之,就是魔法。从长远来看,它有很多数据。问题a)将字符串与
=
进行比较,而不是
进行比较b)FPS(或任何其他需要传输大量数据的游戏)不太可能使用字符串来表示数据类型;在可以以更紧凑的方式表示的数据(使用整型数据类型表示数据)和CPU时间(如果数据表示为数字,则基于字符串选择正确的大小写比选择正确的大小写效率低)上浪费带宽的数据太多了。但是,总体思路当然是正确的(即,发送与数据一起标识信息类型的数据)。