【问题标题】:Multi-reactor Design - am I trying to reinvent Netty?多反应器设计——我想重塑 Netty 吗?
【发布时间】:2013-06-28 21:32:50
【问题描述】:

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

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

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

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

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

提前致谢

【问题讨论】:

    标签: java netty nio


    【解决方案1】:

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

    【讨论】:

    • 谢谢@Abe。只是这样做了,我有一些旋钮和幻灯片可以调整和使用它。到目前为止,我已经能够将吞吐量从原始代码中的 1.2K/秒提高到 ~12K/秒。但目标更高,并继续分析瓶颈
    猜你喜欢
    • 2014-10-22
    • 2013-12-04
    • 2023-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多