1、关于nagle算法的作用
这个是tcp协议内置的网络优化的的一个配置,是用来处理每次都发送较小的包的时候,网卡自动帮你把好几个包放到一起以提高
网络的吞吐量,但是有的时候,我们为了防止这种的粘包的问题以及不希望网络的延迟性太高,所以我们也是经常采用的是禁用这个nalge算法的方案
禁用的方法:
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True) # added line
2、tcp client 实现数据接收:
import socket
import struct
def floatToBytes(f):
bs = struct.pack("f",f)
return (bs[3],bs[2],bs[1],bs[0])
def bytesToFloat(h1,h2,h3,h4):
ba = bytearray()
ba.append(h1)
ba.append(h2)
ba.append(h3)
ba.append(h4)
return struct.unpack("!f",ba)[0]
# context = zmq.Context()
# socketzeromq = context.socket(zmq.PUB)
# socketzeromq.bind("tcp://192.168.127.101:6000")
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('115.156.163.107',5001))
while True:
b = s.recv(1024)
print(b)
print(len(b))
# s.send('ok'.encode('utf-8'))
# print('hello')
if len(b) ==0:
break
我们来看一下禁用前后的效果
3、TCP server 的代码
import socket
import time
# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# # 建立连接:
# s.bind(('115.156.163.107', 6001))
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字
tcp_server_socket.bind(('115.156.163.107', 5001))#绑定本机地址和接收端口
tcp_server_socket.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,True)
tcp_server_socket.listen(1)#监听()内为最大监听值
client_socket,client_addr= tcp_server_socket.accept()#建立连接(accept(无参数))
msg= b'\x05\x03\x15\x04\x80\x00\x00\xcd\x03\x23'
for j in range(1000):
# 每次最多接收1k字节:
time.sleep(0.001)
client_socket.send(msg)
# client_socket.recv(20)
tcp_server_socket.close()
禁用前TCP的数据接收:
禁用后TCP的接收