首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中设计一个线程化的UDP客户机/服务器?

如何在Java中设计一个线程化的UDP客户机/服务器?
EN

Stack Overflow用户
提问于 2011-06-03 12:40:12
回答 4查看 1.9K关注 0票数 1

我只是在寻找一些关于程序设计的洞察力,因为我对线程没有那么丰富的经验。

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

我在他们之间做了一个小小的握手(一个syn,ack,synack之类的东西),然后启动网络线程。

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

  1. 向"toSend“队列添加消息。
  2. 从“接收”队列中提取所有消息并打印它们。

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

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

队列当前为ArrayBlockingQueue<String>(1000)

我的问题如下:

这是一个好的网络线程设计吗?有什么问题我需要处理吗?

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

EN

回答 4

Stack Overflow用户

发布于 2011-06-03 12:48:52

似乎您正在重新发明轮子,并且正在为其他人已经解决的问题(最可能是通过优化的解决方案)而苦苦挣扎,请看一下奈蒂

Netty项目旨在提供异步事件驱动的网络应用程序框架和工具,以快速开发可维护的、高性能和高可伸缩性的协议服务器和客户端。

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

票数 4
EN

Stack Overflow用户

发布于 2011-06-03 12:53:04

就我个人而言,我认为处理UDP网络最好是使用单线程、事件驱动的编程风格,而不是使用线程。无论如何,它都是无状态的,所以在线程中跟踪状态是没有意义的。

通过计时器将事件添加到事件队列中,可以轻松地处理超时之类的事情。

这有效地避免了所有同步问题。

票数 1
EN

Stack Overflow用户

发布于 2011-06-03 13:00:32

我已经在UDP/TCP实时系统上工作了4年多了。你的问题很有道理。在我看来,Netty框架是一个不错的方法,但有点沉重。

我使用的正是你提到的相同的设计,到目前为止还没有看到任何问题。

致以敬意,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6227196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档