相关代码——注意指令只是一个类,它有几个对数据进行操作的方法。创建一个新线程对读取的数据进行操作。
阅读主题:
while(true) {
System.out.println(".");
if(selector.select(500) == 0)
continue;
System.out.println("processing read");
for(SelectionKey sk : selector.keys()) {
Instructions ins = myHashTable.get(sk);
if(ins == null) {
myHashTable.put(sk, new Instructions(sk));
ins = myHashTable.get(sk);
}
ins.readChannel();
}
}
阅读频道
public void readChannel() {
BufferedReader reader = new BufferedReader(Channels.newReader((ReadableByteChannel) this.myKey.channel(), "UTF-8"));
Worker w = new Worker(this, reader.readLine());
(new Thread(w)).start();
}
然后新线程调用更多Instructions
方法。
当 ins 函数完成时,它可能会写入 Writer:
Writer out = Channels.newWriter((WritableByteChannel) key.channel(), "UTF-8");
out.write(output);
out.flush();
我可以确认我的客户(Flash 电影),然后接收并处理输出。
最后,w
退出。
然而,在收到来自客户端的第一条消息并成功处理之后,READ THREAD
循环不再处理更多消息。我相信密钥已在选择器中注册并准备好阅读。我已经通过循环所有键来检查它们是否可以在通道上使用 isReadable 和 isRegistered 读取,并且结果在迄今为止的所有情况下都是正确的。但是,当从客户端发送第二条消息时,我在读取线程中看到的唯一响应是“。” 字符不是每半秒打印一次,而是不断加快。那么,我相信数据在通道中,但由于某种原因,选择器没有选择任何键。
谁能帮我?