gpt4 book ai didi

perl:如何使用 select AND fork 处理多个套接字?

转载 作者:行者123 更新时间:2023-12-04 05:21:40 24 4
gpt4 key购买 nike

我在一个小项目中工作,我需要从一个源(文件、套接字等)读取一些东西,在许多客户端中处理和写入(每个新客户端都不同)。

我正在使用 select 来多路复用 I/O。

如果我可以读取源,我将存储在内部缓冲区中,处理并写入许多输出缓冲区(每个客户端一个)。如果我可以写,我只写缓冲区。听起来不错。

但是我如何才能为大量用户扩展它呢?我正在考虑使用 fork 并设置每个进程的 x 连接。我真的不知道这是一个好方法还是更好的预 fork 或使用不同的端口并使用一些负载平衡但是现在我不清楚我该如何处理 fork + select

例如,如果我在每个进程中使用 100 个客户端,那么在第 101 个客户端中,我将 fork ,但内存中仍然有旧的 select 和 100 个套接字客户端。我可以清理“旧”选择并开始一个新选择,但这很奇怪。我不知道我的策略是否足够好。

最佳答案

通常这是用“prefork”技术制作的。这是这样工作的:

1) 创建监听套接字

2) fork()让 N 个 worker

3) 每个 worker 开始accept()客户(大多数自由 worker 将接受这份工作);同时,“父”进程变为“经理”,waitpid()他的 child ,如果“ worker ”的数量 < N 则 fork

但是这样你就不能在“ worker ”之间发送数据(就像你最初在其他进程中使用第 101 个客户端的情况一样),所以这个设计可能不适合你的需求。在这种情况下,我更喜欢使用 AnyEvent CPAN 模块。这使您可以一次异步处理更多的客户端,因为它使用 epoll/kqueue 进行多路复用,并且它可以在一个信号进程上扩展到数千个连接(如果您的脚本不是 CPU 密集型的)。

关于perl:如何使用 select AND fork 处理多个套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com