2

在我的 TCP 应用程序中,只要 IO 处于阻塞状态,State 设计模式似乎就很有用。

我的 SwingWorker 的 doInBackground() 可以通过引用一个对象来循环读取、写入和接受 TCP 连接中的状态。请参阅维基百科讨论页上的示例:http ://en.wikipedia.org/wiki/Talk%3AState_pattern 。

但是,当我将服务器重构为非阻塞 IO 时,它似乎不再有用。Select() 返回一组为 IO 准备的通道,这些通道通过引用一系列 if 语句中的 SelectionKey 状态来处理。

任何人都可以根据经验或理解当 IO 非阻塞时状态设计模式是否仍然有用?

我问是因为我不确定我是否正确掌握了状态设计模式和 TCP 的关系。

4

1 回答 1

1

仍然非常有用,每个连接只有状态机。select(2)(or poll(2), or epoll(7)) 只是为您提供了一种在多个通道上等待并将事件分派到这些状态机的方法。

于 2012-09-20T17:38:18.383 回答