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