Python 套接字刷新

标签 python sockets

我试图确保每次调用 socket.send 函数时,我的缓冲区都会发送(刷新)到我的服务器(使用 unix 套接字在 C 中)。

根据我的理解(以及我在这个板上看到的内容),只需禁用 naggle 算法。应该这样做,但我的服务器仍然收到 4096 字节 block 的数据(默认设置)...

我在 Python v2.5.4 中使用以下代码:

 self.sck = socket( AF_INET, SOCK_STREAM )

 self.sck.setsockopt( IPPROTO_TCP, TCP_NODELAY, 1 ) # That doesn't seems to work...

 self.sck.connect( ( "127.0.0.1", "12345" ) )

 while( 1 ):
      self.sck.send( "test\n" )
      self.sck.send( "" ) # Still trying to flush...

启用/禁用 TCP_NODELAY 似乎没有任何效果...这是一个错误还是我遗漏了什么?

TIA

最佳答案

TCP 不提供任何类型的有保证的“数据包”发送到另一端。您正在尽可能快地发送数据,并且 TCP 有助于将数据批量化为一次可以发送的尽可能多的数据。您的服务器一次接收 4096 字节的数据,可能是因为这是它所要求的(在 recv() 调用中)。

TCP 是一种流协议(protocol),因此您必须自己实现某种类型的帧。没有内置的消息边界。

关于Python 套接字刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4407835/

相关文章:

python - 如何在显示绘图/图形的同时继续执行 python 脚本?

php - 使用 php 使用套接字发送电子邮件

linux - 套接字无法检测到断开连接

python - 如何有效地过滤 Python 列表理解中的计算值?

python - Pandas 两个数据帧相乘?

python - Python 可以编译为在 V8 引擎上运行吗?

python - 如何提高这个程序的效率?

linux - LDAP 监听本地主机但主机名或 IP

ios - NSStream 不提供任何数据

php - PHP数据包到Minecraft服务器?