作者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
推 LaPass:我沒摸過NIO說.... 不過之前寫過多人連線的東西 10/24 01:16
推 swpoker:這些都可以用mvc(trigger/listener)去實作 10/24 08:58
→ smfy:就是想知道在其他 Thread 寫資料到 NIO 的 Socket 的方法 10/24 11:27
推 LaPass:如果是一般socket,直接寫進去就好了,NIO不清楚..... 10/24 13:48
→ smfy:我也只會用一般 Socket 的做法~唉~ 10/24 23:57
推 swpoker:先寫一個統一處理作業的中心的類別-我會採用facade樣式 10/25 09:25
→ smfy:感謝樓上的回答,但我看了一下facade,不是很確定它怎麼用在 10/25 16:41
→ smfy:多執行緒 我感覺比較像是callback和listener的機制~ 10/25 16:43