Haskell:如何构建一个可以正常关闭的分叉服务器

时间:2014-06-11 09:00:06

标签: multithreading haskell

我在我的项目中使用network-simple。我希望我的函数gateway能够在元组中返回一些函数 - 其中一个函数将是shutdown - 一个启动所有客户端并关闭服务器的函数。

如果gateway使用Network.Simple.serve生成多个分支,那么实施shutdown的最佳方式是什么?

我可以使用TVar来实现它,以表明服务器正在关闭,但在我看来,轮询将是一个次优的解决方案。

1 个答案:

答案 0 :(得分:4)

有很多方法。不知何故,你需要一个控制通道到服务器,并且该控制通道至少接受一条消息," Shutdown"。

你可以这样做:

  • 异步异常:将Shutdown数据类型发送到服务器,该服务器将具有执行客户端的处理程序
  • 在事件循环中测试:如果您的服务器有一个eventloop,只需将传入的控制消息视为事件流的一部分
  • 轮询