2015-12-01 28 views
1

网络上有许多关于启用了epoll/kqueue的GHC的旧信息。例如,Simple Servers wiki page上的代码不再编译。如何使用启用epoll/kqueue的GHC/Haskell版本进行网络连接?

有人可以提供一个基本的例子,说明如何使用这个功能与现代的GHC版本建立,例如,一个TCP服务器,只是在连接上响应“你好”?

+0

你能描述一下什么是“不再编译”的意思,并且在你的问题中直接包含你试图编译的代码? (作为证据,我不只是试图强制任意规则:我将来自标题为“基本并发服务器”的代码放在一个文件中,并且它在我的机器上编译得很好。真的有必要。) –

+0

@DanielWagner嗨丹尼尔。当然。如果你看看最后一个例子,那个实际使用'epoll'的例子,它使用了'loop'函数,但是在这个例子中甚至没有。我得到错误'app3/Main.hs:14:5:不在范围内:'loop''。那是在我将'System.Event'改为'GHC.Event'之后,在任何地方都没有注意到。 – Ana

+1

维基页面已过时。 GHC的IO经理在没有任何特殊程序员的努力下([已经有五年](https://ghc.haskell.org/trac/ghc/ticket/635))使用epoll/kqueue。因此,只需在页面顶部写入天真的线程版本即可。 –

回答

2

GHC的IO管理器在没有任何特殊程序员工作的情况下使用epoll/kqueue。只需编写简单的线程程序 - 将每个并发的阻塞IO调用放在一个单独的线程中--GGH将确保它按照您希望的方式工作。