Perl快速创建套接字的方法(1000+)

Perl快速创建套接字的方法(1000+)

问题描述:

我有一个Perl服务器,当它启动时,它连接到1000多个客户端。使用SSL设置所有连接大约需要30-45分钟。我试图把开始时间缩短到更合理的地步。我尝试使用线程来卸载工作,但无法使其工作。在一个线程中创建套接字并将其返回给调用者并不像预期的那样工作。尝试传递文件描述符并用IO :: Socket :: SSL-> new_from_fd()重新创建回调函数但返回失败。Perl快速创建套接字的方法(1000+)

有没有人有任何建议,如何快速创建这么多插座?或至少快于O(n)...

更新:看起来像POE框架绝对是我想探索的东西。文档听起来像它可以做我需要的东西。我现在正在构建一个概念证明,并且特别在访问Sessions中创建的Socket对象时遇到了麻烦。我可以在POE会话中创建套接字,但是在完成之后,我希望我的主程序将创建的套接字收集到一个散列中。任何人都知道如何从POE会话中检索对象?

更新:有一个想法,包括使用全局变量并将会话套接字添加到会话中,或者保持创建会话的引用并访问它们的堆来聚合它们。立即试用...

+2

你真的需要创建多个套接字吗?由于SSL身份验证不是即时的,因此会有开销。 – Ether 2010-07-14 19:16:54

+1

是的,我知道SSL需要握手和所有设置开销,但我认为这是我唯一的选择。除非你知道一种方法来听取可读的套接字,而没有实际上保持那么多的套接字打开...... 我需要能够监听套接字上的数据,并且现在有1,000,000个用户 – casey 2010-07-14 19:48:37

+3

好吧..想想Web服务器如何工作。仅仅因为Apache可以同时处理200个(说)请求,并不意味着它有200个随时打开的套接字。连接仅在需要时打开。 – Ether 2010-07-14 20:18:07

看看这个TCP SSL Client代码在POE。这个例子可以很容易地扩展到做你所要求的。如果你之前没有在POE编码,那就有一条学习曲线,但它非常好,documented

+0

谢谢我会看看,看看它是否做我需要的东西 – casey 2010-07-15 14:33:21

+0

POE绝对看起来像它可以做我想做的事。谢谢你的提示。我在创建测试/概念验证之前,先将其用于我的真实代码,并且对于学习曲线绝对正确。我知道如何在POE会话中创建套接字,但是我无法将IO :: Socket :: SSL对象返回到主程序中。文档说可以访问会话的数据存储,但我无法弄清楚。 POE逻辑 - 启动一系列会话,每个会话创建并存储自己的一堆套接字。最后,把它们全部收集在主程序中。 – casey 2010-07-16 15:04:37

+0

您或任何拥有POE经验的人都有任何提示访问会话的数据存储以收集我创建的Socket SSL对象吗? – casey 2010-07-16 15:06:26