我在牛仔中使用websocket开发了一个聊天服务器,但我想知道服务器发送给客户端的消息是否成功。我怎么知道?
答案 0 :(得分:17)
Websocket是传统TCP套接字之上的一个相当薄的抽象层。在初始握手之后,差异很小。所以,问题是:如何知道远程对等方是否收到了数据块?简短的回答:只有当对等方通过应用程序级协议明确地确认它时。远程客户端将为您将发送它的每个数据包发送TCP ACK数据包,但是这个事实很好地隐藏在应用程序中。仅接收ACK数据包意味着远程TCP堆栈已处理它,但没有说明客户端应用程序如何(以及如果)处理它。
在聊天协议中添加特殊的“确认接收”消息类型。在所有传出消息中包含单调递增的序列号,并在ACK消息中包含接收消息的SN,以准确了解客户端已处理的数据量。