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

如何在Java中设计线程化UDP客户机/服务器?,java,multithreading,udp,Java,Multithreading,Udp,我只是想了解一些程序设计方面的知识,因为我对线程没有太多经验 目前正在编写一个小客户端。您可以指定该客户端是服务器还是客户端,它将以正确的方式创建协议 我在他们之间做了一个小小的握手,一个syn,ack,synack之类的事情,然后启动网络线程 我有一个主线程,它有一个无限的while循环,做两件事 将消息添加到toSend队列。 从接收到的队列中提取所有消息并打印它们。 网络线程有一个无限while循环,它完成两件事 从toSend队列中提取并发送所有消息。 将消息添加到已提取的接收队列。 队

我只是想了解一些程序设计方面的知识,因为我对线程没有太多经验

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

我在他们之间做了一个小小的握手,一个syn,ack,synack之类的事情,然后启动网络线程

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

将消息添加到toSend队列。 从接收到的队列中提取所有消息并打印它们。 网络线程有一个无限while循环,它完成两件事

从toSend队列中提取并发送所有消息。 将消息添加到已提取的接收队列。 队列当前为ArrayBlockingQueue1000

我的问题如下:

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


目前,我遇到了一个问题,即主线程的一个线程甚至在网络线程有机会发送一条消息之前就填充了toSend队列。我通过让主线程执行一些阻止I/O的工作来处理此问题。

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

Netty项目致力于提供一个异步事件驱动的网络应用程序框架和工具,用于快速开发可维护的高性能和高可扩展性协议服务器和客户端


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

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

Netty项目致力于提供一个异步事件驱动的网络应用程序框架和工具,用于快速开发可维护的高性能和高可扩展性协议服务器和客户端


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

我个人认为处理UDP网络最好使用单线程、事件驱动的编程风格,而不是使用线程。无论如何,它是无状态的,因此尝试跟踪线程中的状态毫无意义

通过计时器将事件添加到事件队列,可以轻松处理超时等问题


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

我个人认为处理UDP网络最好使用单线程、事件驱动的编程风格,而不是使用线程。无论如何,它是无状态的,因此尝试跟踪线程中的状态毫无意义

通过计时器将事件添加到事件队列,可以轻松处理超时等问题


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

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

我使用的是与您提到的完全相同的设计,到目前为止没有发现任何问题


说到这里,

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

我使用的是与您提到的完全相同的设计,到目前为止没有发现任何问题


在这方面,

toSend队列毫无意义。只要让每个人都直接通过套接字发送即可。

toSend队列毫无意义。只要让每个人直接通过插座发送即可。

我会看看netty。谢谢。我去看看内蒂。谢谢