0

我正在开发一个点对点应用程序。因为每个对等点都有一个服务器套接字通道和一个套接字通道,.. 现在我需要两个选择器来处理服务器套接字通道和套接字通道的连接,...

SelectorProvider 似乎是一个单例类,它只处理一个 Selector 实例,.. 我不能同时用于套接字通道,..

有没有办法在一个程序的单个实例中使用两个选择器,..

private ServerSocketChannel svrScktChnl;
private SocketChannel socketChannel;

两个选择器

public Selector selector=null;
public Selector playerSelector=null;

我正在尝试分别初始化这些选择器,一个用于服务器套接字通道,另一个用于套接字通道,..

但是我无法再次初始化,因为它会引发错误,,..

4

1 回答 1

1

现在我需要两个选择器来处理服务器套接字通道和套接字通道的连接,...

不,你没有。您可以为两者使用相同的选择器,除非出于某种原因未在此处说明您想在单独的线程中处理它们,这实际上违反了 NIO 所代表的一切。

SelectorProvider 似乎是一个单例类

错误的。SelectorProvider.provider()返回一个单例,但您不需要使用它:到处都有 API 可以让您指定自己的提供程序。并不是说它是相关的,因为:

它只处理一个 Selector 实例

错误的。我不知道你所说的“fice”是什么意思,但每次调用它时都会SelectorProvider.openSelector()返回一个新的Selector,如果没有在这里发布问题并可能永远等待可能不正确的答案的豪华技术,你可能会自己发现它,甚至如果 Provider 本身是一个单例,那么它不是。

..我不能同时用于套接字通道,..

不,显然你从未真正尝试过。您需要了解这是一门经验科学,您需要进行自己的实验。在 Internet 站点上发布问题并坐等答案并不能有效地利用您或任何其他人的时间,也不能像自己做作业那样快速地提供正确的答案。

它抛出一个错误

你不能指望任何人用这么少的信息来帮助你。你会接受来自客户的错误报告吗?

于 2012-10-03T09:51:36.527 回答