And*_*rew 0 java android nio tcp
我有一个 Android 应用程序,它充当服务器,并通过 TCP 以任意间隔(5-60 秒内)从传感器提供一些数据。客户端应用程序偶尔会通过同一连接发送小块数据。数据的发送和接收必须没有任何延迟。
所有示例和教程(例如http://adblogcat.com/asynchronous-java-nio-for-dummies/)都显示或多或少相同的场景 - 阅读完成后,切换到 OP_WRITE。写入完成后切换到 OP_READ 等等。显然它不适用于我的情况。我尝试像这样同时启用读取和写入
serverChannel.register(selector, SelectionKey.OP_READ|SelectionKey.OP_WRITE);
Run Code Online (Sandbox Code Playgroud)
但它使选择器不断循环,这给 CPU 带来了很大的负载。
我确信这个问题并不完全正确,所以即使有人给我完全不同但有效的想法或我错的地方,我也会很高兴。我没有发布代码,因为它与上述教程的代码几乎相同。
你的问题和你引用的样本都是基于谬论。NIO 中不存在“模式”这样的东西。你可以随时阅读和写作,但如果在错误的时间进行,它们都将无济于事。
write()返回零时,注册 OP_WRITE 通道,记住您正在写入的缓冲区,然后返回到选择循环。互联网上有很多垃圾,对于蔚来来说尤其如此。您的引文中存在众多问题(在此类材料中反复出现):
select()不是异步的;Selector“许可”即可写入;finishConnect()可以返回 false;write()可以返回零或小于所提供的数据量;isConnectionPending()。| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |