lucene + hadoop 分布式并行计算搜索框架
BlogJava
首页
新随笔
联系
聚合
管理
随笔-23 评论-58 文章-0 trackbacks-0
JAVA NIO 多线程服务器 1.2版
Reactor 模式的 JAVA NIO 多线程服务器
public
class
MiniServer
extends
Thread
{
private
static
final
Log log
=
LogFactory.getLog(MiniServer.
class
);
private
final
Selector s;
private
final
ServerSocketChannel ssc;
private
ExecutorService executor;
public
MiniServer(
int
portnumber,ExecutorService executor)
throws
IOException
{
this
.executor
=
executor;
s
=
Selector.open();
ssc
=
ServerSocketChannel.open();
ssc.socket().bind(
new
InetSocketAddress(portnumber));
ssc.configureBlocking(
false
);
ssc.register(s,SelectionKey.OP_ACCEPT);
}
public
void
run()
{
try
{
while
(s.isOpen())
{
int
nKeys
=
s.select();
if
(nKeys
>
0
)
{
Iterator
<
SelectionKey
>
it
=
s.selectedKeys().iterator();
while
(it.hasNext())
{
SelectionKey key
=
it.next();
it.remove();
if
(
!
key.isValid()
||
!
key.channel().isOpen())
continue
;
if
(key.isAcceptable())
{
SocketChannel sc
=
ssc.accept();
if
(sc
!=
null
)
{
sc.configureBlocking(
false
);
sc.register(s, SelectionKey.OP_READ,
new
Reader(executor));
}
}
else
if
(key.isReadable()
||
key.isWritable())
{
Reactor reactor
=
(Reactor) key.attachment();
reactor.execute(key);
}
}
}
}
}
catch
(IOException e)
{
log.info(e);
}
}
}
public
interface
Reactor
{
void
execute(SelectionKey key);
}
public
class
Reader
implements
Reactor
{
private
static
final
Log log
=
LogFactory.getLog(Reader.
class
);
private
byte
[] bytes
=
new
byte
[
0
];
private
ExecutorService executor;
public
Reader(ExecutorService executor)
{
this
.executor
=
executor;
}
@Override
public
void
execute(SelectionKey key)
{
SocketChannel sc
=
(SocketChannel) key.channel();
try
{
ByteBuffer buffer
=
ByteBuffer.allocate(
1024
);
int
len
=-
1
;
while
(sc.isConnected()
&&
(len
=
sc.read(buffer))
>
0
)
{
buffer.flip();
byte
[] content
=
new
byte
[buffer.limit()];
buffer.get(content);
bytes
=
NutUtil.ArrayCoalition(bytes,content);
buffer.clear();
}
if
(len
==
0
)
{
key.interestOps(SelectionKey.OP_READ);
key.selector().wakeup();
}
else
if
(len
==-
1
)
{
Callable
<
byte
[]
>
call
=
new
ProcessCallable(bytes);
Future
<
byte
[]
>
task
=
executor.submit(call);
ByteBuffer output
=
ByteBuffer.wrap(task.get());
sc.register(key.selector(), SelectionKey.OP_WRITE,
new
Writer(output));
}
}
catch
(Exception e)
{
log.info(e);
}
}
}
public
class
Writer
implements
Reactor
{
private
static
final
Log log
=
LogFactory.getLog(Writer.
class
);
private
ByteBuffer output;
public
Writer(ByteBuffer output)
{
this
.output
=
output;
}
public
void
execute(SelectionKey key)
{
SocketChannel sc
=
(SocketChannel) key.channel();
try
{
while
(sc.isConnected()
&&
output.hasRemaining())
{
int
len
=
sc.write(output);
if
(len
<
0
)
{
throw
new
EOFException();
}
if
(len
==
0
)
{
key.interestOps(SelectionKey.OP_WRITE);
key.selector().wakeup();
break
;
}
}
if
(
!
output.hasRemaining())
{
output.clear();
key.cancel();
sc.close();
}
}
catch
(IOException e)
{
log.info(e);
}
}
}
posted on 2011-08-29 18:35
nianzai
阅读(3093)
评论(3)
编辑
收藏
所属分类:
NIO
评论:
#
re: JAVA NIO 多线程服务器 1.2版 2011-08-30 13:59 |
seo千里眼
这个多线程程序挺实用哦。
回复
更多评论
#
re: JAVA NIO 多线程服务器 1.2版 2011-09-03 16:13 |
阿不都外力
收藏一下!以后看。。。
回复
更多评论
#
re: JAVA NIO 多线程服务器 1.2版
2011-09-05 23:54 |
步步为营
Tomcat中用NIO比较多,搭建高性能服务器时NIO挺好用的,呵呵
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
JAVA NIO 多线程服务器 1.3版
JAVA NIO 多线程服务器 1.2版
JAVA NIO 多线程服务器 1.1版
<
2011年8月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔分类
NIO(3)
Nut(lucene + hadoop 分布式并行计算框架)(5)
中文分词(8)
分布式(2)
开发工具(2)
机器学习(1)
随笔档案
2013年5月 (1)
2013年4月 (3)
2012年9月 (3)
2012年8月 (2)
2012年7月 (1)
2012年6月 (2)
2011年8月 (3)
2011年4月 (2)
2011年2月 (1)
2010年12月 (1)
2010年11月 (1)
2010年10月 (1)
2010年9月 (1)
2010年7月 (1)
搜索
最新评论
1. re: 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
您好,您没有给出Sentence和Token的定义,我猜不出啊
hdwgz@qq.com
--余道
2. re: 全切分分词程序,能实现中英文数字混合分词
能对车牌号进行分词吗? M 是什么啊
--sdyjmc
3. re: JAVA NIO 多线程服务器 1.3版 [未登录]
Handle 这个方法里面写的是什么处理呢?能否也贴出来看看
--z
4. re: 脚本、Ajax网页内容抓取工具(第二版)
共享源码么
--diyunpeng
5. re: JAVA NIO 多线程服务器 1.1版
ProcessCallable 这是什么包的呢
--jnan77
阅读排行榜
1. lucene + hadoop 分布式搜索运行框架 Nut 1.0a8(6655)
2. lucene + hadoop 分布式搜索运行框架 Nut 1.0a9(5373)
3. 基于词典的逆向最大匹配中文分词算法,逆向分词比正向分词效果好 (4482)
4. Nut开发环境搭建(虚拟机下hadoop0.20.2+zookeeper3.3.3+hbase0.90.2开发环境的搭建)(4067)
5. 隐马可夫(HMM)中文分词词性标注程序(3830)
评论排行榜
1. lucene + hadoop 分布式搜索运行框架 Nut 1.0a8(11)
2. lucene + hadoop 分布式搜索运行框架 Nut 1.0a9(9)
3. Nut开发环境搭建(虚拟机下hadoop0.20.2+zookeeper3.3.3+hbase0.90.2开发环境的搭建)(6)
4. lucene + hadoop 分布式搜索运行框架 Nut 1.0a7(4)
5. 全切分分词程序,能实现中英文数字混合分词(4)