【发布时间】:2018-04-18 07:19:57
【问题描述】:
所以我已经搜索了很长一段时间,并尝试了很多东西,但就是不知道如何让它工作。我使用 XAMPP 和 angular (v5) 前端在本地机器上创建了一个 PHP WebSocket 服务器(棘轮),没有任何问题。
然后我尝试将两者部署在运行 LAMP 堆栈的 DigitalOcean 实例上,因为该应用程序不仅仅是 WebSocket 聊天,其余部分(RESTful API)工作正常,但是当 JavaScript 尝试连接到WS 我明白了
WebSocket connection to 'ws://<ip-address>:8888/chat' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
所以我所做的是启用 apache2 mods proxy 和 proxy_wstunnel 并为虚拟主机创建一个条目
<VirtualHost *:8080>
DocumentRoot /var/www/html_backend/web
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html_backend/web">
AllowOverride All
Allow from All
</Directory>
ProxyRequests Off
ProxyPass "/chat/" "ws://localhost:8888/"
# also tried 0.0.0.0 and 127.0.0.1 instead of localhost
</VirtualHost>
PHP服务器socket是这样启动的
public function actionStart() {
$app = new App('localhost', 8888, '0.0.0.0');
$app->route('/chat', new Chat());
$app->run();
}
在 JS 中我尝试连接到这个
this._socket = new WebSocket('ws://<ip-address>:8888/chat');
我也在应该代理它的端口 8080 上尝试过,但是它返回了 404 错误。
在 80 端口上我有我的前端和在 8080 端口上我的后端,这是目前工作的。我可以在端口 8888 上启动 WebSocket,它没有给我检测到任何错误,但是当我尝试连接它时,我得到了上面的错误消息。这只是为了测试,我还没有 SSL 证书,但首先我想让它工作还是我需要一个?我尝试了很多在网上找到的 URL 组合,但到目前为止都没有。
就在写作时,我注意到套接字是从/var/www/html_backend 而不是/var/www/html_backend/web 启动的,DocumentRoot 可能会导致代理问题吗?
我希望有人能指出我正确的方向,因为到目前为止我发现的所有“有效”解决方案都没有那么有用。
最好的问候
【问题讨论】:
-
检查你的端口是否打开。套接字服务器是一个痛苦......完全成熟,易于使用,畅销等。
-
@ArtisticPhoenix 不是我第一次听到关于套接字的... xD,但是端口是开放的。
-
大约 3 年前我构建了一个作为实验,然后决定使用 RabbitMq,因为它具有比我希望构建或维护更多的功能。
-
我会看看,但现在我很乐意让它工作,只是为了它
-
您没有尝试
::1,但我怀疑这是问题所在。你用的是什么浏览器,Chrome?我刚读到chrome不允许非SSL连接,你可以试试火狐。我永远不会建议尝试 IE 或 Edge,我经历了 IE6 的日子......哈哈
标签: php apache websocket mod-proxy ratchet