[英]PHP Websocket on LAMP Ubuntu
因此,我已經在此上搜索了很長時間,並嘗試了很多方法,但無法弄清楚如何使其工作。 我使用XAMPP和一個有角度的(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服務器套接字
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
可能導致代理問題嗎?
我希望有人可以指出正確的方向,因為到目前為止,我發現的所有“有效”解決方案都沒有幫助。
最好的祝福
我用PHP Linux構建了Websocket,並在Digitalocean上開發了棘輪系統,它的工作原理很好(我的例子是用wss,但也可以用ws做)。
我建立它的方式:
服務器端棘輪網絡套接字:
$wsServer = new WsServer(new Chat);
$server = IoServer::factory(
new HttpServer($wsServer),
8000
);
Apache httpd-ssl.conf:
<VirtualHost _default_:443>
ProxyPass /wss2/ ws://your.domain:8000
您的js文件:
wss://your.domain/wss2/
而不是僅使用以下命令在棘輪中運行php websocket: php server.php
,就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.