我正在尝试在D中实现TCP服务器。任何人都可以告诉我如何在D中有效处理大量传入连接?有一个有效的选择器机制? EPoll?还有别的吗?
我有在D中打开标准套接字的代码。没问题。当我打开N个连接时,我需要知道哪些数据已准备好读取,哪些数据已准备好写入数据。
在Java中,我可以使用java.nio.Selector。 D有类似的机制吗?
如果是,是否有人有代码示例?
答案 0 :(得分:3)
就个人而言,我在Linux上使用低级操作系统功能,例如socket,epoll等,在Windows上重叠I / O或WSAasyncselect等import core.sys.linux.epoll;
以获取epoll定义,或者使用extern(C)
自己定义它们。
我这样做是因为我知道这样,所以对我来说很容易,而且我也不是图书馆的粉丝。但是如果你没有这样做,那么你可能想要尝试使用lib来获取大小。这个,例如:https://github.com/etcimon/libasync为你做了一堆跨平台的东西。或者有一个vibed.org框架,它包含在libasync之上,以实现更多的抽象。
一般来说,您可以像在C中一样进行,包括相同的OS调用或相同的C库。
因此,如果您在C中找到如何进行操作的教程,将其翻译为D通常很简单。
答案 1 :(得分:1)
我建议你看一下优秀的TangoD2网络API,更具体地说是Tango Selector:https://github.com/SiegeLord/Tango-D2/blob/d2port/doc/example/networking/selector.d