再次请教banq先生!急待

05-05-17 wangzheng99
我想可能是我没描述清楚,是这样:

我们都知道,不论是聊天还是游戏,一方在没发出消息前,都有可能收到消息,同样在没收到消息前也可能要发出消息。那假如我刚刚发出消息,此时SelectionKey被注册为可读,而我要再次发出消息,于是这样的情况发生了:接收方接收不到我的第二条消息(因为此时它在我这边的RequestList中),而我也只能等到channel中有可读事件发生,才能有机会“自动”让handler来处理send()行为(当然是它首先处理完read()行为)。

我试图改写MessageQueue中的行为以及在Connection中强行对Selector来wakeup,但似乎还是不行。不知banq先生明白我的意思没?我很欣赏banq先生的意图,我也想更完善你的意图。希望得到您的指点!谢谢!

banq
2005-05-17 10:43
我的设计基础模型是根据通用的Dou Lee的示例实现的。

注意,你的理解可能有一个误区,Selector是被动的,实际Selector是主动的,是事件发生能量源泉,只有有外部连接到Selector,selector就会触发,我在第一章谈Reactor模式,你要多理解一下。

reactor模式实际如同观察者模式,是一个地雷,所以外界我们无需对其干预。只要捕捉selector的可读或可写事件即可,编程模式顺从它即可。

代码的运行状态和代码的编写状态是不一样的。

猜你喜欢