java - 如何在 Java 中设计线程化的 UDP 客户端/服务器?

标签 java multithreading udp

我只是在寻找对程序设计的一些见解,因为我对线程没有那么多经验。

目前正在编写一个小客户端。您可以指定该客户端是“服务器”还是“客户端”,它将以正确的方式创建协议(protocol)。

我在它们之间进行了一些握手(syn、ack、synack 之类的事情),然后启动网络线程。

我有一个主线程,它有一个无限的 while 循环并做两件事。

  1. 将消息添加到“toSend”队列。
  2. 从“已接收”队列中提取所有消息并打印出来。

网络线程有一个无限循环,它做两件事。

  1. 从“toSend”队列中提取所有消息并发送。
  2. 将消息添加到“已接收”队列(已获取)。

队列目前是ArrayBlockingQueue<String>(1000)

我的问题如下:

这是对网络线程的良好设计吗?我需要处理任何问题吗?

目前我遇到了一个问题,其中一个线程(主线程)甚至在网络线程有机会发送一条消息之前就已经填满了“toSend”队列。我通过让主线程执行一些阻塞 (I/O) 的工作来“处理”这个问题。

最佳答案

您似乎正在重新发明轮子,并且正在努力解决其他人之前已经解决的问题(很可能是优化的解决方案),请查看 Netty :

The Netty project is an effort to provide an asynchronous event-driven network application framework and tools for rapid development of maintainable high performance & high scalability protocol servers & clients.

有一个广播 UDP/IP 客户端和服务器的示例。

关于java - 如何在 Java 中设计线程化的 UDP 客户端/服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227196/

相关文章:

.net - .NET 的线程安全缓存库

c - 线程池 - 处理任务多于线程的情况

c - 使用winsock接收UDP数据包

java - 如何使用不同类的 JButton 打开新的 JFrame

java - 使用 java 8 流从内部列表中检索数据

python - 在 python 中使用 SocketServer 框架创建多线程服务器

linux - Python 套接字错误 : [Errno 13] Permission denied

c# - UdpClient.() 与 UdpClient(端口)

java - Spring JPA Java [ ORA-01861 文字与格式字符串不匹配 ]

java - jsoup - 如何使用 Jsoup 提取此图像?