【发布时间】:2014-05-10 07:51:18
【问题描述】:
如果一个进程线程打开一个inproc ZMQ 套接字,然后由于一些未处理的异常而死,如果套接字没有关闭会发生什么?这种做法有多糟糕?
更具体地说,我实现了一个非常简单的消息代理,非常类似于 Haskell 中的http://zguide.zeromq.org/page:all#Multithreading-with-MQ。
工作线程打开一个新的套接字,并在无限循环中等待处理消息。 工作线程中的任何地方都没有关闭套接字。
现在,如果工作线程中存在未处理的异常,并且线程死亡,那么不关心就重新启动线程有多糟糕?
我正在粘贴 Haskell 示例中的工作代码:
worker :: ZMQ z ()
worker = do
receiver <- socket Rep
connect receiver "inproc://workers"
forever $ do
receive receiver >>= liftIO . printf "Received request:%s\n" . unpack
-- Suppose there is some exception here
liftIO $ threadDelay (1 * 1000 * 1000)
send receiver [] "World"
【问题讨论】:
-
查看 LINGER 标志。您可能还想查看 nanomsg。我认为它比 zeromq 有更好的默认值,例如,它将 LINGER 设置为 1 秒。
-
啊,问题不在于 LINGER。我只是想了解未关闭的 inproc 套接字的影响,尤其是使用 Haskell 绑定。
标签: multithreading haskell zeromq