我正在写一个Java应用程序,将实例化一个类的对象来表示对我的应用程序的另一端连接,并与外部系统注册客户。爪哇 - 在多线程多选择的非阻塞套接字
每个客户对象在其内具有两个嵌套类,代表前端和后端。前端类将连续地从实际的客户端接收数据,和发送指示和数据传送到后端类,这将需要从前端该数据,并将其在使用适当的格式和协议发送到外部系统该系统需要。
在设计上,我们希望有一个客户对象的每个实例是一个线程。然后,在每个线程中自然会有两个套接字[EDIT],每个[/ EDIT]有自己的NIO通道,一个客户端,一个系统端分别驻留在前端和后端。但是,现在这引入了对非阻塞套接字的需求。我一直在阅读教程here,它解释了如何在主线程中安全地使用Selector来处理所有具有连接的线程。
但是,我需要的是多个选择 - 在自己的线程每一个操作。从阅读前面提到的教程,我了解到Selector中的键集不是线程安全的。这是否意味着,如果我试图给它们各自的套接字和通道对,单独的Selectors在自己的reponctive线程中实例化可能会产生冲突的关键字?将选择器移动到主线程是一种微小的可能性,但基于我所给出的软件要求,这是远远不够理想的。感谢您的帮助。
恐怕我对你的回答感到困惑,你是说频道本身就是一个线索,频道是它自己的线索,还是我应该单独设置和轮询频道线程从客户端? 我可能没有在我的原始文章中清楚,每个客户端对象将有两个套接字和两个通道在应用程序的任何一方进行通信。熟悉非阻塞和非阻塞的概念,并且特别选择了非阻塞,因为要求多路复用通信。 – 2009-07-11 14:37:57