在套接字级别,建立连接后,服务器将继续从套接字读取数据,我的问题是服务器如何知道客户端不会发送任何数据?
答案 0 :(得分:1)
服务器如何知道客户端不会发送任何数据
不是。一种选择是扫描预先约定的“消息末尾”字节序列。当服务器看到此字节序列时,它将认为消息已完全接收。如果缓冲区中还有更多数据,则它属于另一条消息。
否则,客户端必须提前通告其消息长度。 “我现在要向您发送X个字节。这些是:...”然后服务器仅从套接字读取X个字节,并认为消息已完全接收。
看一下redis protocol作为第二种方案的示例。它非常简单且功能齐全。实际上,它是如此简单,可以实现一个完整的客户端in only 20 lines of ruby。