我们有一个正在传输和接收数据的应用程序。我们的想法是双向发送和接收消息。
对于传入消息,我们的系统运行以下技术:
public void run() {
try {
socket = new DatagramSocket(null);
socket.bind(new InetSocketAddress(port));
socket.setReuseAddress(true);
while (!Thread.currentThread().isInterrupted() && bContinue) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
processPacket(packet)
}
} catch (SocketException e) {
Log.v(TAG, "Socket closed exception");
} catch (Exception e) {
Log.e(TAG, "Error starting the socket listener");
e.printStackTrace();
return;
}
if (socket != null) {
// Socket teardown omitted...
}
}
这似乎非常适合接收数据包。我的问题在于数据包的传输。这两种思想流派要么
这两种方法的伪代码类似于:
public void run1() {
socket.open();
socket.sendMessage();
socket.close();
}
public void run2() {
socket.open();
while (1) {
message = BlockingMessageQueue.take();
socket.send(message);
}
socket.close();
}
每次收到或传输数据包时,前者都会打开,发送和关闭。后者创建一个单独的线程,等待数据包并一次发送一个。
做前者与后者有什么好处?数据包通常每10秒发送一次,因此是否存在任何设计缺陷;保持插座打开状态"在一个单独的线程?我已经习惯了嵌入式世界,程序设计只能启动必要的线程,并让它们尽可能地阻塞。我见过的一些设计广泛使用定时器来启动数据包传输等线程,这是我不习惯的惯例。
感谢您的帮助!