给定TCP,当IO是非阻塞时,状态设计模式是否很少使用?

时间:2012-09-20 16:54:23

标签: tcp state nonblocking

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

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

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

任何人都可以从经验或理解中确认,当IO是非阻塞时,状态设计模式是否仍具有效用?

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

1 个答案:

答案 0 :(得分:1)

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