我用Python编写了一个服务器,用于以"Header:Message"的形式向客户端发送数据
我希望能够单独发送每条消息,以便客户端需要执行最少的工作才能读取"标题"和"消息"
不幸的是,我无法弄清楚如何正确刷新python套接字,所以当我有多个发送快速连续执行时,消息在套接字缓冲区中被集中在一起并作为一个大块发送.
例:
服务器发送...
socket.send ("header1:message1")
socket.send ("header2:message2")
socket.send ("header3:message3")
Run Code Online (Sandbox Code Playgroud)
客户端收到..."header1:message1header2:message2header3:message3"
我想收到三条消息
header1:message1
header2:message2
header3:message3
Run Code Online (Sandbox Code Playgroud)
我需要一种方法在每次发送后进行刷新
在http://linux.die.net/man/2/select上,在BUGS部分,提到选择系统调用有时可以虚假地设置FD就绪,随后的读取调用将返回0.文本描述了一个这样的例子(错误的校验和)但我假设还有其他原因(否则他们会解决这个问题).
任何想法可能导致另一个原因选择返回FD准备虚假.
这是否也适用于其他操作系统.我目前正在询问Linux.
上述链接的相关部分:
在Linux下,select()可以将套接字文件描述符报告为"准备好读取",而不是后续的读取块.这可能例如在数据到达时发生但在检查时具有错误的校验和并被丢弃.可能存在其他情况,其中虚假地报告文件描述符为就绪.因此,在不应阻塞的套接字上使用O_NONBLOCK可能更安全.