我只是在寻找一些关于程序设计的洞察力,因为我对线程没有那么丰富的经验。
目前正在编写一个小客户端。您可以指定该客户端是“服务器”还是“客户端”,它将以正确的方式创建协议。
我在他们之间做了一个小小的握手(一个syn,ack,synack之类的东西),然后启动网络线程。
我有一个主线程,它有一个无限的while循环,它做两件事。
网络线程有一个无限while循环,它做两件事。
队列当前为ArrayBlockingQueue<String>(1000)
我的问题如下:
这是一个好的网络线程设计吗?有什么问题我需要处理吗?
目前,我遇到了一个问题,其中一个线程(主线程)甚至在网络线程有机会发送一条消息之前就已经填充了"toSend“队列。我通过让主线程做一些阻塞(I/O)的工作来“处理”这件事。
发布于 2011-06-03 12:48:52
似乎您正在重新发明轮子,并且正在为其他人已经解决的问题(最可能是通过优化的解决方案)而苦苦挣扎,请看一下奈蒂。
Netty项目旨在提供异步事件驱动的网络应用程序框架和工具,以快速开发可维护的、高性能和高可伸缩性的协议服务器和客户端。
有一个广播UDP/IP客户端和服务器的例子。
发布于 2011-06-03 12:53:04
就我个人而言,我认为处理UDP网络最好是使用单线程、事件驱动的编程风格,而不是使用线程。无论如何,它都是无状态的,所以在线程中跟踪状态是没有意义的。
通过计时器将事件添加到事件队列中,可以轻松地处理超时之类的事情。
这有效地避免了所有同步问题。
发布于 2011-06-03 13:00:32
我已经在UDP/TCP实时系统上工作了4年多了。你的问题很有道理。在我看来,Netty框架是一个不错的方法,但有点沉重。
我使用的正是你提到的相同的设计,到目前为止还没有看到任何问题。
致以敬意,
https://stackoverflow.com/questions/6227196
复制相似问题