作者smfy (光波记忆)
看板java
标题[问题] NIO 多执行绪写入时的做法
时间Tue Oct 23 22:22:30 2012
小弟是最近才开始接触到 NIO
有NIO写入的问题想请教大家
一般在书上或是网路上看到的例子大多是
while(...) { //selector 轮询
....
if ( key.isAcceptable() ) { //接收连线
....
}
if ( key.isWritable() ) { //写入
SocketChannel client = (SocketChannel) key.channel();
.....
client.write(buffer);
}
}
只是目前遇到的问题是
小弟有另一个 Thread 定时会去读取资料库
然後再写到某几个 Socket 中 (不一定是全部)
想请问一下如何在其他 Thread 写资料到 SocketChannel
因为没看到例子因此写的很犹豫
如果网路上有例子的话也希望能够分享一下
谢谢
我自己想到的方式有两个,但不知合不合法 :
1. 共用写入的 buffer ,用 synchonized 处理存取问题
2. 不写 key.isWritable 那段,
把SocketChannel 或 socket 存进 list 中直接使用
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.2.128
1F:推 LaPass:我没摸过NIO说.... 不过之前写过多人连线的东西 10/24 01:16
2F:推 swpoker:这些都可以用mvc(trigger/listener)去实作 10/24 08:58
3F:→ smfy:就是想知道在其他 Thread 写资料到 NIO 的 Socket 的方法 10/24 11:27
4F:推 LaPass:如果是一般socket,直接写进去就好了,NIO不清楚..... 10/24 13:48
5F:→ smfy:我也只会用一般 Socket 的做法~唉~ 10/24 23:57
6F:推 swpoker:先写一个统一处理作业的中心的类别-我会采用facade样式 10/25 09:25
7F:→ smfy:感谢楼上的回答,但我看了一下facade,不是很确定它怎麽用在 10/25 16:41
8F:→ smfy:多执行绪 我感觉比较像是callback和listener的机制~ 10/25 16:43