我只是在寻找对程序设计的一些见解,因为我对线程没有那么多经验。
目前正在编写一个小客户端。您可以指定该客户端是“服务器”还是“客户端”,它将以正确的方式创建协议(protocol)。
我在它们之间进行了一些握手(syn、ack、synack 之类的事情),然后启动网络线程。
我有一个主线程,它有一个无限的 while 循环并做两件事。
- 将消息添加到“toSend”队列。
- 从“已接收”队列中提取所有消息并打印出来。
网络线程有一个无限循环,它做两件事。
- 从“toSend”队列中提取所有消息并发送。
- 将消息添加到“已接收”队列(已获取)。
队列目前是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/