java nio
文章平均质量分 76
tianshilang
这个作者很懒,什么都没留下…
展开
-
NIO[SelectableChannel.register和Selector.select会有锁等待冲突]
结论: register得放在select之前进行Thread Dump信息:"Poller-1" prio=6 tid=0x040f0400 nid=0x408 runnable [0x044df000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.WindowsSelectorImpl$SubSele...原创 2012-05-09 09:40:12 · 487 阅读 · 0 评论 -
Nio框架需要注意的两个问题(2)
书接上回,上次说到了selector的register和select会有锁冲突,这次再来考虑write的问题。1. channel.write(Bytebuffer)是不是总是可写,当socket的writeBuffer满的时候会返回0,说明不能再写进任何字节。假设要写入一个很大的ByteBuffer,有可能需要分多次写。2. channel上执行write操作需要获得锁保证同步,...2012-11-27 17:35:13 · 100 阅读 · 0 评论 -
关于select()方法最大轮询数限制的更正
昨日和公司同事分享Netty入门的时候,讨论了如下两个问题: 1. Select的最大轮询数限制是1024 2. 当超过1024以后还能注册吗? 或者如何突破1024的限制 我昨天又查阅了一番文档,select最大轮询数不一定是1024,而是FD_SET这个参数,如FD_SET设置为128,则最大轮询数为128。一般为FD_SET的值设置为1024,...2012-08-23 10:46:08 · 945 阅读 · 0 评论 -
Netty笔记:ReplayingDecoder
为什么需要ReplayingDecoder,它和FrameDecoder有什么不同呢?ReplayingDecoder是一种特殊FrameDecoder,它能实现在IO阻塞的情况下实现无阻塞的解码。听起来比较拗口而且不好理解,举个例子来说,假设你在用netty设计一个文件传输的模块,采用的Header-Content的协议,在Header中说明文件的长度,我们用一个int来容纳长度,Conte...2012-12-08 12:57:47 · 327 阅读 · 0 评论 -
Netty笔记:ReplayingDecoder中buffer使用的一点小陷阱
ReplayingDecoder的原理是阻塞IO,当没有读到足够的数据时,会抛出RelayError,进入以后的LOOP中不断check是否有足够的数据。因此每次读取时我们倒要check一下buffer的数据。为此Netty提供了ReplayingDecoderBuffer这样一个代理类封装原有的buffer。以readInt为例,首先要检查是否有4个字节可读。不满足抛出ReplayErro...2012-12-11 10:27:57 · 370 阅读 · 0 评论 -
基于Netty实现CometStreaming方式的聊天室
这段时间在研究web服务器消息推送,除了html5的websocket,comet是一项很好的方案。comet不是一项专门的技术,更像是一个解决方案。说来也简单,服务端需要能把connection hold,浏览器也需要特殊的支持保持从服务端获取数据,幸好用xmlhttprequest,ajax的实现也是靠它。comet一般有两种方式long poll和streaming。长轮询是c...2013-01-06 17:18:21 · 288 阅读 · 0 评论 -
基于Netty打造HttpClient实现股票实时推送
Netty也研究了一段时间,实践是对知识掌握的试金石。有些东西只是看了面儿上的东西我觉得懂了,如不去深入,一旦要用它去做点什么东西却又觉得无从下手。学车的时候,学员问教练我怎么算是学会开车了,教练告诉他当你倒着开和向前开一样自如的时候就算学会了。怎么算掌握了一项技术呢?我的观点,多阅读源码,然后去实践,如此反复,读源码就像倒车。 为啥用Netty去实现呢?首先提供了Http...2013-01-11 18:21:02 · 718 阅读 · 0 评论