Java 当缓冲区为空时,使用同步缓冲区的Comet实现的行为是什么?

Java 当缓冲区为空时,使用同步缓冲区的Comet实现的行为是什么?,java,cometd,Java,Cometd,Cometd3.1.4Java实现使用一个缓冲区来跟踪传入消息,该缓冲区的默认大小为2MB。从断开连接重新启动时,可能会出现尖峰,并且您可能会超过限制 图书馆有什么行为?字节丢失,如果收到来自服务器端的后续通知,则可以对其进行处理?可以按照说明配置客户端缓冲限制 但是,我建议您检查您的逻辑,因为通常不建议向客户机发送消息的MIB,因为客户机可能需要很长时间来处理它们。 此外,如果消息很少,但数据量很大,您可能希望进行设置,以便客户端获得附带下载URI的Comed消息,而不是在Comed消息中发送

Cometd3.1.4Java实现使用一个缓冲区来跟踪传入消息,该缓冲区的默认大小为2MB。从断开连接重新启动时,可能会出现尖峰,并且您可能会超过限制


图书馆有什么行为?字节丢失,如果收到来自服务器端的后续通知,则可以对其进行处理?

可以按照说明配置客户端缓冲限制

但是,我建议您检查您的逻辑,因为通常不建议向客户机发送消息的MIB,因为客户机可能需要很长时间来处理它们。 此外,如果消息很少,但数据量很大,您可能希望进行设置,以便客户端获得附带下载URI的Comed消息,而不是在Comed消息中发送数据

话虽如此,您可以编写一个,例如,丢弃旧消息,以便在重新连接时不发送数据的MIB

扩展保证了服务器到客户端的传递,因此,只要不超过客户端接收缓冲区,就可以保证队列消息被传递到客户端

您可能需要一组特定于您的应用程序的东西。 您可能需要控制消息队列的大小、保证传递的确认扩展,以及更大的客户端缓冲区

Comet默认情况下不会这样做,因为每个人都想要不同的解决方案:一些人希望会话失败,一些人希望丢弃所有消息,一些人希望只保留最后的N条消息,等等


Comet为您提供了实现逻辑所需的挂钩。

我不控制服务器,只控制客户端。是否确认如果缓冲区大小太小,客户端将丢失通知?如果服务器发送大量消息或发送的消息超过配置的最大消息大小,客户端将丢失消息。这在任何传输中都会发生,例如浏览器对WebSocket消息的限制是很少KiB(不像您的情况那样是MiB)。您需要联系服务器应用程序提供商,要求他们发送较小的批。如果使用HTTP传输,则可以在客户端上配置非常大的最大消息大小。