php - 如何在基于 cpanel 的共享主机平台上设置和运行 PHP WebSocket 服务?
问题描述
我在 Ratchet PHP 中创建了一个聊天应用程序。它在使用 WAMP 的本地机器上运行良好。我希望它设置在实时服务器上。
在我的服务器上,我有:
- PHP 支持
- SSH 访问
- 端口 9000,为 OutBound 连接打开。
- 子域
我没有的:
- 没有入站连接的端口。
- SSH 中没有 root 访问权限。说我看不到/编辑
iptables
我跑了php server.php
,它给出了有关服务器已启动并在端口 9000 上侦听的成功消息。但是当 HTML 页面尝试使用 ws://domain:9000 连接它时,它会遇到错误-
Firefox 无法与位于 ws://domain.com:9000/ 的服务器建立连接
我用谷歌搜索了很多,看来我需要的是一个用于入站连接的端口。
但是根据这个答案 ,我需要的是 PHP 支持 Ratchet 在共享主机上工作。任何人都可以解释我真正需要什么以及是否有任何解决方法如果它在我的服务器上的东西列表中不可用。
解决方案
基本上,没有
共享主机环境(即具有 VirtualHost 配置、PHP、MySQL 和 CPanel 接口的 Apache)不太可能支持您的 websocket 应用程序。
要使 websocket 正常工作,您需要:
- 有一个专用于 websocket 入站连接的端口;或者
- 有一个 HTTP/HTTPS 服务器,它知道何时升级连接和代理传递到您的 websocket 应用程序。
第一条路由要求服务器允许入站连接到某个端口号。这对托管服务提供商来说是一个潜在的安全问题,因此您的供应商不太可能同意您这样做。
第二条路线需要 Apache 服务器安装并启用mod_proxy和mod_proxy_wstunnel 。它还要求您使用ProxyPass配置,它根本不能被配置覆盖.htaccess
。
因此,除非您的主机授予您访问 Apache 主配置的权限(或者会为您应用此类更改),否则您将非常绝望。
建议
要运行您自己的 websocket 服务,您应该考虑使用 Virtual Private Server 服务,例如 Amazon EC2、DigitalOcean VPS。
推荐阅读
- python - 为什么在 openCV 中删除 waitKey() 不起作用?
- python - 从字典生成python类
- java - 如何在 Swing 中将图像移动到背景图像上时最小化渲染
- python - 不知道在soup.select 中放什么。(对使用 Python 自动化无聊的东西做一个变体)
- r - 加载徽标(图像)并将其保存在 r 中的 xlsx 中的最快方法
- firebase - 如何在 Firestore 中存储用户喜欢(对于事件应用程序)?
- security - 模拟安全服务的安全方法是什么?
- java - 使用 getClass().getResource() 时 VLCJ 不播放视频
- javascript - 将数组和字符串合并到数组中
- java - 如何在一个类中打印另一个类中生成的随机 int?