Haskell并发和句柄

Haskell并发和句柄,haskell,concurrency,handle,Haskell,Concurrency,Handle,我正在编写一个小型通知服务器,将数据推送到客户端。基本架构如下所示(精简的伪代码): acceptConnections sock=forever$do 连接Handle,as,已经是一个MVar包装在底层上。我不太明白你在做什么(不是说不清楚,我有点病,所以可能我很慢),但我猜GHCs内置的线程安全处理Handle可以拯救你。Handle,因为它已经是底层的MVar包装。我不太明白你在做什么(不是说不清楚,我有点病,所以可能我有点慢),但我猜GHCs内置的线程安全处理Handle可以拯救你。别

我正在编写一个小型通知服务器,将数据推送到客户端。基本架构如下所示(精简的伪代码):

acceptConnections sock=forever$do

连接
Handle
,as,已经是一个MVar包装在底层上。我不太明白你在做什么(不是说不清楚,我有点病,所以可能我很慢),但我猜GHCs内置的线程安全处理
Handle
可以拯救你。

Handle
,因为它已经是底层的MVar包装。我不太明白你在做什么(不是说不清楚,我有点病,所以可能我有点慢),但我猜GHCs内置的线程安全处理
Handle
可以拯救你。

别担心,我肯定我没有很好地说明我在做什么——基本上我很好奇如何调用hPutStrLn和hGetLine同一个手柄上的不同线程“同时”。你回答了我的笨拙问题。谢谢!别担心,我肯定我没有很好地说明我在做什么——基本上我很好奇同一手柄上的不同线程如何“同时”调用hPutStrLn和hGetLine。你回答了我的笨拙问题。谢谢!
acceptConnections sock = forever $ do
    connection <- accept sock
    forkIO (handleConnection connection)

handleConnection connection = do
    connectionHandle <- socketToHandle connection ReadWriteMode
    handleMessage connectionHandle
    hClose connectionHandle

handleMessage connectionHandle = forever $ do
    message <- hGetLine connectionHandle 
    if shouldPushMessage message
        then hPutStrLn targetConnection message
        else return ()