我正在寻找一个带有阻塞写入操作的WebSocket Server API(适用于任何平台并使用任何语言编写)。 到目前为止,我见过的所有实现都只有async-io方法。
我需要的是阻止发送功能以了解信息何时完全发送(发送缓冲区为空)和/或可以访问相关的 tcp图层信息,例如发送缓冲区和RTT的队列长度,不使用客户端的任何ACK或回复。
是否有我可以使用的实现,或者我应该自己在TCP套接字上实现它?
答案 0 :(得分:0)
您可以使用golang websocket lib(https://github.com/gorilla/websocket)或使用linux syscall编写自己的websocket lib来执行“阻止”网络操作。但它们仅在系统tcp缓冲区已满时阻止,而在对等方收到所有数据后不阻塞和解除阻塞。如果系统tcp缓冲区未满,则写入系统调用将返回小于1毫秒。如果您发送非常大的数据,这个系统tcp缓冲区完全阻塞可能会满足您的需求。
如果你想在对等体收到所有数据后阻塞和解除阻塞,那么你的要求是不能直接满足tcp / websocket协议。
您只能知道您的同伴在从您自己的协议向您发回确认后才会收到所有数据。
当然,您可以编写一个协议,在对等方读取所有数据并且对等应用程序将其与您的api配对后,写操作可以取消阻止,但该协议不是tcp / websocket协议。
请注意,即使您可以获取tcp ack数据包,也无法知道另一个对等方的进程何时处理了所有数据(例如将它们存储在文件中)。您必须设计一个api,对等方可以告诉协议它处理了所有数据。