在select采用Websocket作为我公司Web应用程序背后的实时技术时,我试图确定服务器工作负载是什么。
据我了解的Apache内部,我相信一个Apache进程或线程将保持在整个Websocket会话代理与mod_proxy_wstunnel的连接保持活跃; 这个过程是否也会处理传统的客户端http请求? 或者当他们到达时,另一个进程被浪费了吗?
这一切都取决于您的Web应用程序的devise。 你确实可以通过build立的websocket传递“传统的http请求”,或者你可以用更传统的方法处理请求。 不幸的是(从系统工程师的angular度看)开发人员很懒,很less经过必要的努力,通过build立的websocket传递大量的stream量。 它通常用于向页面上的各个位发布“更新”以及将图像数据和其他任何其他内容留给更典型的GET和POST的工作。
总之…是的…你将在每个websocket的生命周期中绑定一个进程…以及每个请求的一个连接。 但是,您可以使用连接保留来循环重复使用同一个连接…但这可能会影响整个页面加载时间,因为您必须等待每个项目被串行发送,而不是并行发送。
当谈到Apache的时候,这就是橡胶遇到的问题。 您可以更改多处理模块(MPM)以更改这些保持活动连接的处理方式……以及许多其他操作来调整整体性能。
尽pipe你可以对Apache做所有的微调,但有时候这并不是完美的工具。 阿帕奇是工具箱里的瑞士军刀。 它被devise成是工具箱中最有活力的工具。 Nginx更精简,不包括你会在apache-knife中find的镊子或剪刀选项,而nodejs只是一把黄油刀。 有时(当环境允许的时候)最好是混合搭配,以获得所有这些好处。