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 ()