1

我的 Android(2.3 及更高版本)应用程序需要与 100 个(最多)同时运行 TCP 服务器的嵌入式设备进行 TCP 通信。

智能手机应用程序应该足够强大,可以同时处理 100 多个连接。它需要经常设置/获取信息。所以对于网络模块,我们分析了以下选项:

  • 一种选择:拥有一个线程管理器 ( ThreadPoolExecutor) 并为每个设备建立连接。
    • 可能的问题:制作 100 的线程是不可行的。
  • 第二种选择:使用 Java NIO 选择器来维护每个 fd。
    • 问题:Java NIO 似乎很慢。您要求他们检查的描述符越多,他们的速度就越慢。

while (mMainSelector.select(SELECTOR_TIMEOUT) { .... 获取选定键的东西 .... SocketChannel socketChannel = channel.accept()

从客户端开始连接到上述代码到达最后一行(channel.accept())大约需要1-3秒。

另外,为了确认我的测试,我参考了一些支持这一点的博客。

避免蔚来

NIO 不比 IO 快

  • 第三种选择: epoll: 比选择器更好,但我想它在 Android 中并不容易获得。有人用过epoll安卓吗?我们有针对 Android 的 libev 构建吗?

是否有任何其他替代方案最适合处理 100 个同时连接,而不影响速度?

4

0 回答 0