在 Apache 服务器上使用 WebSocket

Posted

技术标签:

【中文标题】在 Apache 服务器上使用 WebSocket【英文标题】:Using WebSocket on Apache server 【发布时间】:2012-07-05 06:24:00 【问题描述】:

随着 WebSockets 的流行,很难找到关于如何在 Google 的 Apache 服务器上使用它们的好的演练。

我们正在用 php (symfony2) 开发一个插件,它会不时运行一种聊天实例。我们发现在这方面 WebSockets 比 AJAX 更有趣、更标准、更快捷。问题是,我们小组中没有太多的系统管理员资源,而且我们发现很难收集有关以下事项的良好信息:

我们可以在传统的 Apache 专用服务器上运行 WebSocket 实例吗?如果可以,您是否有对我们有用的链接? 如果我们需要修改服务器,您会推荐什么样的工具,因为我们在系统管理员方面不太熟练,因此我们无法承担高昂的维护费用。

非常感谢,

ps:我们将链接回您的博客/网站,因为我们将在我们的开发博客上发布有关我们应用的这一部分的技术/信息帖子。

再次感谢您!

【问题讨论】:

你也可以试试这个ApacheWS 【参考方案1】:

正如@zaf 所说,您更有可能找到一个独立的 PHP 解决方案——而不是在 Apache 中运行的东西。也就是说有一个apache WebSocket module。

但是,根本问题是 Apache 在构建时并未考虑到维护许多持久连接。它与 PHP 一起建立在发出请求并快速发回响应的理念之上。这意味着,如果您保持请求处于打开状态,并且您需要非常快速地研究水平扩展,那么资源可能会很快用完。

我个人认为你有两个选择:

    使用替代的实时 Web 技术解决方案,并使用队列或短期请求(Web 服务)在您的 Web 应用程序和实时 Web 基础架构之间进行通信。 将持久连接的处理和实时 Web 基础架构的扩展卸载到实时 Web 托管服务。我为 Pusher 工作,我们属于这一类。

对于自托管和托管选项,您可以查看我的realtime web tech guide。

【讨论】:

非常有趣的东西 :) 非常感谢!我喜欢您的指南,尽管区分解决方案并没有多大帮助。我们会检查文档;)再次感谢! 我确实需要花时间尝试所有技术,并就不同选项的优缺点提供一些指导。目前,它只是一个可供点击的列表 - 您自己调查的起点。【参考方案2】:

一种方法是使用独立安装的网络套接字服务器。

对于 PHP,您可以尝试: http://code.google.com/p/phpwebsocket/ 或 http://github.com/Devristo/phpws/

您也可以尝试其他一些项目。

基本上,你需要上传、解包并开始运行进程。

在前端,您将有 javascript 连接到特定端口上的服务器。

大多数 websocket 服务器都有一个演示,可以回显它听到的任何内容,因此这是编写一些测试代码的好地方。您甚至可以找到一个基本的聊天实现。

棘手的部分是监控 Web 套接字服务器并确保它平稳连续地运行。

尝试在尽可能多的浏览器/设备上进行测试,因为这将决定您选择哪种 websocket 服务器实现。您必须注意新旧协议。

【讨论】:

非常感谢。您是否偶然想到了任何监控工具?玩得开心! 我们有自己的轻量级监控工具。对于初学者来说,一个简单的 cron 脚本可以检查进程何时未运行并重新启动它。您可以从中构建或搜索现成的过程监控应用程序。 好的,我相信我们的开发团队一定能做点什么!再次感谢!【参考方案3】:

我介绍了另一个 websocket 服务器:PHP Ratchet (Github)。

这是更好更完整的客户端和服务器端代码以及浏览器支持列表。

请查看link。

【讨论】:

谢谢,但是为什么更好? 因为它是 FAST & EASY & React 子集 (reactphp.org)。它有很好的文档和支持。 我们可以看看任何测试吗?【参考方案4】:

另一种途径是使用专用的 websocket 服务器。

www.achex.ca 试用 Achex Websocket Server 并查看教程。

如果您真的需要 Apache,请查看 Apache Camel。 (但你必须设置它,它比 achex 服务器复杂一点) http://camel.apache.org/websocket.html

【讨论】:

以上是关于在 Apache 服务器上使用 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章

使用 apache 建立安全 websocket 连接

apache配置反向代理+websocket

Apache 网站 + Nodejs 后端 + Websocket 服务器

是否有处理 php 脚本的类似 Apache 的 Websocket 服务器解决方案?

尝试使用 Java 11、OpenJSK、Apache Tomcat/8.5.41 配置 Websocket 端点

Apache Tomcat 在使用 websocket 时返回 404