首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于Perl的高性能Socket服务器

基于Perl的高性能Socket服务器
EN

Stack Overflow用户
提问于 2010-07-13 15:32:50
回答 1查看 1.8K关注 0票数 2

我需要使用perl编写一个套接字服务器,它将在64位linux (2.6x内核)上运行。Linux上是否有支持IO完成端口和类似端口的库?

我需要监听多个端口。8000-8100做这件事有没有聪明的方法?

协议必须使用长度字节。

你推荐哪种线程库?我已经使用基于协作多任务的线程调度器在Windows上编写了类似的代码。我的意思是,我希望避免为每个套接字创建一个线程来处理超过10.000个并发连接。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-13 19:19:25

Perl中的线程通常是不被推荐的。

相反,为了获得高性能,您应该考虑使用non blockingevent driven programming

使用常规套接字,您的进程会阻塞每个IO操作,即从未准备好的套接字读取将使您的进程进入休眠状态,直到数据可用。使用非阻塞/事件驱动,您可以轮询套接字,并在套接字准备好读取或写入套接字时获得回调,因此单个进程可以在多个套接字上进行多路复用,从而提供良好的可扩展性能,因为您不需要派生新的进程来处理更多的客户端。

在Perl中有许多很好的基于事件的框架,例如POEAnyEvent POE是一个具有许多模块和功能的特定事件循环,而AnyEvent是一个抽象层,它允许您在同一代码中使用多个事件循环。

您还应该研究一下libev,它类似于POE,但开销要少得多。

编写事件驱动的代码一开始有点棘手,因为你需要小心处理你的阻塞代码,例如cpu密集型操作,或者使用非阻塞的库。因为你只有一个进程,如果它忙于做一些事情,它就不能做任何其他的事情--比如对套接字进行轮询和发出回调。

因此,如果你需要非阻塞和密集的计算,一种方法是创建工作分支,并使用非阻塞管道在它们和事件循环之间通信,这对于上面的库来说非常简单。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3235017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档