首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非事件驱动的HTTP服务器环境中的服务器端Websocket实现

问非事件驱动的HTTP服务器环境中的服务器端Websocket实现
EN

Stack Overflow用户
提问于 2013-06-07 16:12:23
回答 1查看 404关注 0票数 5

我试图理解服务器端Websocket端点的实现/选项-特别是在使用PSGI/Plack的Perl中,我有一个问题:为什么所有服务器端websocket实现都基于事件驱动的PSGI服务器(Twiggy、Tatsumaki等)?

我知道websocket通信是异步的,但是一个非事件驱动的PSGI服务器(比如Starman)可以产生一个异步侦听器来处理websocket方面的事情。我见过(但不理解) Websocket服务器的PHP实现,那么为什么不能用PSGI实现同样的实现,而不必将服务器更改为事件驱动的服务器呢?

EN

回答 1

Stack Overflow用户

发布于 2014-03-06 19:24:53

处理套接字的底层网络逻辑取决于平台、操作系统和特定的软件实现。

最常见的三种方法是:

  • pulling -有一个阻塞常量“询问”套接字是否有一些数据。这个方法很糟糕,因为它将阻塞主线程的执行,只要它等待每个套接字的一些data.
  • thread -每个新的连接都涉及创建新的线程,并以阻塞的方式询问每个套接字在该线程内发生的事情。所以它不会用逻辑阻塞主线程。这种方法很糟糕,因为为每个连接创建线程对内存来说太昂贵了,并且可能在1Mb或内存左右,基于操作系统和其他criteria.
  • async -使用系统功能在出现问题时“通知”您的进程。所以你可以在你的应用程序准备好后立即做出反应(在单线程应用程序的情况下),甚至可以直接在单独的线程中反应。这种方法非常有效,因为它节省了RAM,并且允许您的应用程序在不需要等待或请求数据的情况下工作。它利用了大多数操作系统和平台提供的现有功能。

考虑到这一点,您确实可以创建单进程函数方法来处理套接字流量。但正如之前所证明的那样,这根本不是有效的。这就是为什么完全异步模型是当今主流的原因,因为大多数语言和平台都支持这种范式。

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

https://stackoverflow.com/questions/16979249

复制
相关文章

相似问题

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