JAVA - MultiThread服务器 - 接收和发送之间的滞后

时间:2013-10-07 11:26:21

标签: java multithreading

我的多线程UDP服务器最多启动100个线程。在每个线程中,它连接到外部设备并从每个线程接收数据流。收到它后,我有一个时间窗口,我需要向外部设备发送一个确认。

在run()内接收位。

byte[] receiveData = new byte[2000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);

在接收后在run()内发送位。

DatagramPacket reply = new DatagramPacket(sendData,sendData.length,receivePacket.getAddress(),receivePacket.getPort();
serverSocket.send(reply);

当运行wireshark来分析网络流量时,我注意到在我的服务器收到数据流之后它不会立即发送ack包,它需要几秒钟和其他设备的几个其他通信,直到确认包被发送到设备在设备端造成超时。

在多线程环境中,服务器在发送数据包之前等待所有线程完成?

因为几乎所有从服务器出来的数据包都会等待作为服务器输入的数据包。

套接字具有相同的读写队列吗?

先谢谢你的帮助,我要疯了! :)

1 个答案:

答案 0 :(得分:0)

  

在多线程环境中,服务器在发送数据包之前等待所有线程完成?

没有

  

套接字具有相同的读写队列吗?

没有

您必须在线程之间保持一些您忽略的同步。它甚至可以在receivePacket本身。