gpt4 book ai didi

java - 如何优化简单的套接字通信?

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:55 26 4
gpt4 key购买 nike

客户端发送消息。服务器读取消息并写入回复。客户阅读回复。重复。每条消息少于 500 字节。套接字未关闭。

我在 LAN 上的两台台式电脑之间每秒收到大约 800 个请求+响应。主机上的网络 Activity 几乎难以察觉。

如果我不执行 readReply (或在单独的线程中执行),整个过程会爆炸到 30.000 条消息/秒或更多!这也会使主机上的网络 Activity 达到峰值。

我的问题:

  1. 800 条消息/秒对于单个套接字上的请求/响应协议(protocol)来说是一个合理的数字吗?

  2. 删除 readReply 调用如何能够提高性能???

  3. 除了使用 UDP 之外,还可以采取哪些措施来改进这一点?还可以使用其他协议(protocol)吗?

服务器:

while (true) {
message = readMessage();
writeReply("Thanks");
}

客户:

while (true) {
writeMessage("A message");
reply = readReply();
}

注释:

  • 我在 Java 和 Php 中实现了这一点,并得到了大致相同的结果。
  • Ping 延迟为 <1 毫秒

最佳答案

基本问题是延迟:网络帧/数据包到达目的地所需的时间。

例如,1 毫秒的延迟将速度限制为最多 1000 帧/秒。 2 毫秒的延迟可以处理 500 fps,10 毫秒可以处理 100 fps 等等。

  1. 在本例中,当延迟为 0.5 毫秒时,预计可管理 1600 fps (800*2)。

  2. 我认为这是因为您设法每帧发送更多数据。一段时间后它会填满客户端的 TCP 缓冲区。

  3. 如果可能的话,批量(管道)消息。客户端批量发送10条消息,然后等待服务器回复。服务器也应该在一个 block 中发送所有 10 个回复。理论上这应该会使速度快 10 倍。

关于java - 如何优化简单的套接字通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20503531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com