1

我正在尝试迁移具有以下特征的现有 NIO 服务器代码库 - 在选择器的控制下执行连接接受的单线程 - 执行套接字读/写的多个线程(一个线程:一个选择器:一个接受连接的 SocketChannel)

我想迁移到一个模型,其中单个 READ/WRITE 线程可以有一个 Selector,并且多个接受的 SocketChannel 可以注册和取消注册。这样,一个线程就可以多路复用多个 SocketChannel 进行 IO。

我知道这个模型会直接映射到Netty 的情况,其中有一个老板线程和可配置的工作人员数量和每个工作人员的多个连接。ExecutionHandler 是正交的,所以我暂时不考虑它。

具体问题: 我是否在重新发明“Netty”轮子,或者对于预计对延迟敏感的服务器而言,上述方法是否有任何区别,其中连接数可能高达 5000,二进制协议消息交换率预计将达到 60-70K 消息/秒?

我知道所提到的数字不仅会受到上述设计选择的影响,还会受到其他因素的影响。但是设计选择可以产生更大的影响——至少我是这样认为的

提前致谢

4

1 回答 1

0

我认为你正在重新发明。Netty 正是这样做的,甚至更多。但是由于 netty 现在已经很好地模块化了,如果你不想要其余的功能或“包袱”,你甚至可以选择 netty 的单个 maven 子模块而不是整个东西。
从头开始编写的基本问题是,您可能会遇到大量 netty 已经解决的问题、平台问题、jdk 解决方法等等。
作为记录,对于我用 netty 编写的服务器,我能够轻松获得上述消息率(实际上更多),但在我 4 岁的 centrino 处理器笔记本电脑上进行测试时,客户端数量较少(100 个)。
可能您应该从 netty 示例模块中获取一个示例,编写您的 5000 连接客户端并测试延迟是否适合您,然后再走这条路。应该只需要几个小时就可以做到这一点。

于 2013-06-28T13:32:50.983 回答