yanf4j引入了客户端非阻塞API - 编程入门网
race();
}
yanf4j引入了客户端非阻塞API(3)时间:2011-06-12 BlogJava dennis注意,connect方法并不阻塞,而是立即返回,连接是否建立可以通过 TCPConnectorController.isConnected()方法来判断,因此通常你可能会这样使 用: try { connector.Connect(new InetSocketAddress ("localhost", 8080)); while(!connector.isConnected()) ; } catch (Exception e) { e.printStackTrace(); } 来强制确保后面对connector的使用是已经连接上的connector,然而更好的 做法是在Handler的onConnected()回调方法中处理逻辑,因为这个方法仅仅在连 接建立后才会被调用。 两个ConnectorController都有系列send方法,用于发送数据:
0.50-beta2带来的另一个修改就是Session接口添加setReadBufferByteOrder 方法,用于设置session接收缓冲区的字节序,默认是网络字节序,也就是大端 法。这个方法建议在Handler的onSessionStarted回调方法中调用。 在0.50-beta最重要的修改是引入了session发送队列缓冲区的流量控制选项 。默认情况下,session的发送缓冲队列是无界的,队列的push和pop也全然不会 阻塞。在设置了缓冲队列的高低水位选项后即引入了发送流量控制,规则如下: a)当发送队列中的数据总量大于高水位标记(highWaterMark), Session.send将阻塞 b)在条件a的作用下,Session.send的阻塞将持续到发送队列中的数据总量小 于于低水位标记(lowWaterMark)才解除。 缓冲队列高低水位的设置通过Controller的下列方法设置: public void setSessionWriteQueueHighWaterMark(int highWaterMark); public void setSessionWriteQueueLowWaterMark(int lowWaterMark); 缓冲队列的流量控制想法来自ACE的ACE_Message_Queue,是通过 com.google.code.yanf4j.util.MessageQueue类实现的。 0.50-beta还引入了Session.send(Object msg)的重载版本 Session.send (Object msg,long timeout),在超过timeout时间后send仍然阻塞时即终止send 。注意,现在Session.send的这两个方法都返回一个bool值来表示send成功与否 ,并且都将响应中断(仅限启动了流量控制选项)抛出InterruptedException。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |