在我的TCP应用程序中,只要IO处于阻塞状态,状态设计模式就似乎很有用。
我的SwingWorker的doInBackground()可以通过引用一个对象来遍历TCP连接中的读取,写入和接受状态。请参阅Wikipedia讨论页面上的示例:http://en.wikipedia.org/wiki/Talk%3AState_pattern。
但是,当我将服务器重构为非阻塞IO时,它似乎不再有用。 Select()返回了一组准备用于IO的通道,这些通道通过参考一系列if语句中的SelectionKey状态来处理。
[任何人都可以从经验中确认或了解,当IO处于非阻塞状态时,状态设计模式是否仍然有用?
我问是因为我不确定我是否正确掌握了状态设计模式和TCP的关系。
仍然非常有用,每个连接只有状态机。 select(2)
(或poll(2)
或epoll(7)
)只为您提供了一种在多个通道上等待并将事件分配给这些状态机的方法。