Tcp 什么是正确的网络协议,用于以尽可能低的延迟将整数偶尔从计算机A传输到计算机B?
我不是网络专家,所以请容忍我。我需要在两台计算机之间建立一个非常简单的单向数据连接,每100ms使用该连接将整数(int8或int16)从计算机a传输到计算机B。连接和数据传输将始终在方向a->B。因为我想尽快对@B中的包作出反应,我想知道我应该使用哪种协议来最小化网络延迟。也就是说,我希望传输尽可能“实时”,理想情况下延迟<10ms(如果可能,不应丢失任何包) 下面是我的具体问题:Tcp 什么是正确的网络协议,用于以尽可能低的延迟将整数偶尔从计算机A传输到计算机B?,tcp,udp,websocket,Tcp,Udp,Websocket,我不是网络专家,所以请容忍我。我需要在两台计算机之间建立一个非常简单的单向数据连接,每100ms使用该连接将整数(int8或int16)从计算机a传输到计算机B。连接和数据传输将始终在方向a->B。因为我想尽快对@B中的包作出反应,我想知道我应该使用哪种协议来最小化网络延迟。也就是说,我希望传输尽可能“实时”,理想情况下延迟
非常感谢示例代码:)您可以为此使用TCP。只要确保
B
在收到每个整数后将应用程序级确认发送回A
。这将允许ACK背驮数据,确保下一次传输不会延迟。延迟应该可以小于1ms。鉴于这些非常优化的网络条件,我认为UDP非常适合该任务(数据丢失应该非常罕见,TCP是一种过度杀伤力)。如果我理解正确,这些要求应该很容易满足。事实上,您应该能够获得<1ms
延迟。一个简单/粗略的测试是在两台计算机之间使用ping
,大致了解时间
对于实现,我将使用TCP/IP。它使可靠性更容易实现(比UDP更简单),并且相对容易实现。您可能希望禁用Nagle算法(
setsockopt(…TCP\u NODELAY…
),以消除通常会发生在如此小的数据包上的延迟。我认为您正在寻找的解决方案是客户机-服务器体系结构中的TCP套接字。
由于你没有说明编程语言的选择,我先在Python中尝试一个概念证明,然后(如果它太慢)切换到普通C或C++(使用所提到的LIBS之一)。
另外,请查看延迟和套接字。答案:
# Echo server program
import socket, sys
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', int(sys.argv[1])))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
# Echo client program
import socket, sys, time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
i = 0
while True:
i += 1
start = time.time()
s.sendall('Test payload #%d' % i)
data = s.recv(1024)
end = time.time()
print "%f-%f" % (end, start)
print "Received '%s' back in %f milliseconds" % (data,
(end-start)*1000.0)
time.sleep(0.5)
python ./server.py 8123
python ./client.py SERVER_HOST 8123