我正在将一个客户端应用程序写入websocket服务器。
我收到很多消息,偶尔(每30分钟左右)想发送一小块数据,不到1kb。
我希望尽量减少接收这个小数据块所需的时间,每个ms计数。
这种工作的连接几乎是LAN质量,对服务器的ping是0.3ms。我的客户端是用C ++编写的。我不控制服务器。
我可以做些什么来减少这种延迟?我想TCP_NO_DELAY可能是个好主意?
答案 0 :(得分:1)
没有。存在TCP_NODELAY以允许在TCP之上分层时,未设计为与TCP一起使用的协议执行得更好。它不适合被设计为在TCP之上分层的应用程序,并且它将在恶劣条件下产生病态行为。
您需要做两件事:
1)除非完整,否则不要发送小块数据。也就是说,聚合整个查询或请求一次性发送。
2)在您的协议中包含应用程序级别的确认,以便TCP ACK可以依赖它们。也就是说,让服务器发送某种"好的"收到每个请求后返回客户端,即使您的应用程序级协议没有严格要求。