我目前正在尝试评估是否可以为Android实现项目。我看到的一个主要问题是,由于它是一个P2P客户端,我们在运行时必须保持大量的连接。现在,连接不会传输大量数据,它更像是一个消息传递系统,因此,如果我们每隔一段时间阅读一条64字节的单个消息,那么每个连接都有一个线程会产生无用的开销。适用于Android的非阻塞IO
所以我想知道在Linux上是否支持非阻塞IO,例如select()或poll()。
有什么建议吗?
我目前正在尝试评估是否可以为Android实现项目。我看到的一个主要问题是,由于它是一个P2P客户端,我们在运行时必须保持大量的连接。现在,连接不会传输大量数据,它更像是一个消息传递系统,因此,如果我们每隔一段时间阅读一条64字节的单个消息,那么每个连接都有一个线程会产生无用的开销。适用于Android的非阻塞IO
所以我想知道在Linux上是否支持非阻塞IO,例如select()或poll()。
有什么建议吗?
查看java.nio套接字,选择器和通道。有些链接:
Android: Unbuffered IO http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html http://developer.android.com/reference/java/nio/channels/SocketChannel.html http://www.developer.com/java/article.php/3837316/Non-Blocking-IO-Made-Possible-in-Java.htm
或者,也许我没有看过你的问题的权利。
当然。一旦您的应用程序声明使用互联网许可,您可以使用NDK在C中使用通常可用于非root用户的所有常规Linux网络事物,并且可以使用Java中的任何人(可能是您如果没有人殴打您)不屑于写支持。
嗯,有一个例外:你的移动提供商可能不允许传入连接,除非你特别设置它们,否则大多数wifi路由器都不会。但这些都是基础设施问题,而不是android本身的问题。
您可能还需要想出一些活动的组合,以提供前台用户界面和一项服务,以在仅显示状态栏图标的情况下继续实际传输。
对我来说这看起来很完美。非常感谢:-D – cdecker 2010-12-04 16:09:39