我目前正在尝试评估是否可以为Android实现项目。我发现一个主要问题是,由于它是一个P2P客户端,我们必须在运行时保持大量的连接。现在连接不传输大量数据,它更像是一个消息传递系统,因此如果我们不时地读取64字节的单个消息,那么为每个连接创建一个线程会产生无用的开销。
所以我想知道Linux上是否支持非阻塞IO,例如select()或poll()。
有什么建议吗?
答案 0 :(得分:6)
查看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
或者,也许我没有正确地阅读你的问题。
答案 1 :(得分:2)
当然。一旦你的应用程序声明使用了互联网权限,你就可以使用NDK完成通常可用于C中的非root用户的所有普通Linux网络内容,以及任何来自java的人(可能是你没有人打过它)打算写支持。
嗯,有一个例外:您的移动服务提供商可能不会允许传入连接,大多数无线路由器都不允许,除非您专门设置它们。但这些都是基础设施问题,而不是Android本身的问题。
您可能还需要提供一些Activity的组合来提供前台UI和服务,以便在后台继续实际传输,只显示状态栏图标。