想象一下,我有一台能够以每秒10,000条消息的速度生成消息的服务器。但我的客户端每秒最多只能接收1000条消息。
系统1 如果我的系统在第一个毫秒内发送1000条消息,那么剩余的999毫秒就不会发生任何事情。
系统2 我的系统每毫秒发送1条消息,因此在1000毫秒(1秒)内它将发送1000条消息。
Q1 )鉴于客户端每秒最多可处理500条消息,哪种系统更好?
Q2 )系统1对客户端的影响是什么?它会压倒客户吗?
由于
答案 0 :(得分:0)
Wil它压倒了客户端:它取决于消息的大小和套接字缓冲区大小。发送方发送的消息被缓冲。如果客户端因为缓冲区已满而无法使用,则发送方正在使用的输出流将阻塞。当客户端使用了一些消息时,发送者可以继续写入,因为他的OutputStream被解除阻塞。
Windows系统上的典型缓冲区大小曾经是8192字节,但是操作系统中的操作系统和设置可能会有所不同。
因此系统1不会压倒客户端,它会在某个时刻阻止。
最佳方法是什么,仅取决于您的应用程序的设计。
例如:我在通过USB写入Arduino时遇到了类似的问题(不是套接字客户端,但其他问题相同)。在我的问题,缓冲消息,因为它是面部跟踪相机的位置问题。当Arduino读取它们时,缓冲的位置不再相关,但它必须处理它们,因为这样的缓冲区是一个队列,如果你读出旧的缓冲区,你只能获得最新的位置。 Arduino永远无法跟上正在生成的消息,因为当新的位置到达Arduino代码时,它已经过时了。所以那是“压倒性的”。
我通过使用双向通信解决了这个问题。 Arduino会向制作人发送一条消息说:READY(接收消息)。然后制作人将发送一个(最新的)面部跟踪位置。然后Arduino重新定位了相机并请求了一条新消息。这样,有一种流控制,阻止了生产者溢出Arduino。
答案 1 :(得分:0)