0

嘿,我还是 javascript 的新手。

我正在使用 NodeJS、socket.io 和 javascript 开发多人服务器。

我正在玩我在网站上找到的服务器脚本。它使用 .split 向客户端发送多个信息字符串。客户端然后使用一个数组来根据它接收到的顺序来确定使用 .split 数据的目的。

int(Socket.LastDataElement(2))
int(Socket.LastDataElement(3))

我的第一个问题是这些包裹是否有可能以错误的顺序出现,或者没有正确清除?

可能的结果:

健康=西瓜

速度 = 芝士蛋糕

或者

错误的球员射出子弹!


第二个问题:

从我目前的角度来看,与将 Health、X、Y、Z、Attack 等作为单个包发送的替代方案相比,发送.split字符串听起来非常聪明。但它真的可以节省带宽和时间吗?还是因为我是菜鸟所以才这样看。

干杯

4

2 回答 2

1

首先,没有。它们永远不会出现乱序(对您的应用程序而言)。作者将数据交给 TCP(传输控制协议)实现,该实现完成将数据传输到正确远程机器上正确进程的所有工作。读者将耐心等待一个不同的、有序的数据块,然后处理它。根据您的应用层协议(WebSockets、Sockets.io),可能会发送整个数据报,或者一次只发送一点字符数据。

你是微观管理。这是 TCP 要处理的问题。无论您的消息大小如何,您的 TCP 实现(可能在操作系统级别)都会按照它认为适合传输的方式对其进行分块。除非您要发送大量数据(价值从千字节到兆字节)并且您需要能够一次处理一点,否则您无需担心数据的分块和数据包大小。

一般来说,确保你的传输是原子的(你的应用程序在另一端做你想做的事情所需的最少信息量),并且你不会对乱序数据包有任何问题,你会就带宽而言,很好。

于 2012-10-23T20:34:06.970 回答
0

第一个问题有点难以理解,但是....

根据我使用 socket.io 的经验,消息总是按照客户端发送的顺序到达,并且您永远不会丢失任何消息。但是,可能存在这样一种情况,例如,发送了 10 条消息,分散在 2 秒内,但由于延迟问题,在 10 条消息的快速连续中收到另一条消息 - 就好像它们都同时发出一样(再次,订单仍然保留)。根据游戏中发生的情况,有时这并不重要。但其他时候,您实际上关心的是每条消息发送之间经过了多长时间(例如玩家在 2 秒内按下触发器 10 次或在 5 毫秒内按下 10 次)。然后你被迫做一些事情,比如给消息加上时间戳,并理解另一端的时间戳。

至于第二个问题:在不太了解 socket.io 或 WebSockets 的底层实现的情况下,我仍然猜测你越是集中在一条消息中,你的情况就越好——如果不是在带宽方面,然后至少在性能和延迟方面。

在 javascript 中,处理程序函数(处理接收到的 json 的函数)在每条消息中调用一次,因此将消息集中在一起可以确保处理程序被调用的次数更少。

于 2012-10-23T20:19:56.503 回答