Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu上的PHP Websocket_Php_Apache_Websocket_Mod Proxy_Ratchet - Fatal编程技术网

Ubuntu上的PHP Websocket

Ubuntu上的PHP Websocket,php,apache,websocket,mod-proxy,ratchet,Php,Apache,Websocket,Mod Proxy,Ratchet,所以我已经在这上面搜索了很长一段时间,尝试了很多东西,但就是不知道如何让它工作。我在本地机器上使用XAMPP和angular(v5)前端创建了一个PHP WebSocket服务器(ratchet),工作时没有任何问题 然后我尝试在DigitalOcean实例上部署这两个应用程序,其中一个LAMP堆栈正在运行,因为该应用程序不仅仅是WebSocket聊天,其余的(RESTful API)工作正常,但是当JavaScript尝试连接到WS时,我得到了 WebSocket connection to

所以我已经在这上面搜索了很长一段时间,尝试了很多东西,但就是不知道如何让它工作。我在本地机器上使用XAMPP和angular(v5)前端创建了一个PHP WebSocket服务器(ratchet),工作时没有任何问题

然后我尝试在DigitalOcean实例上部署这两个应用程序,其中一个LAMP堆栈正在运行,因为该应用程序不仅仅是WebSocket聊天,其余的(RESTful API)工作正常,但是当JavaScript尝试连接到WS时,我得到了

 WebSocket connection to 'ws://<ip-address>:8888/chat' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
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');
this._socket=newwebsocket('ws://:8888/chat');
我还在8080端口上尝试了它,它应该从那里被代理,但随后它返回了404错误

在端口80上,我有我的前端,在端口8080上,我的后端,到目前为止都在工作。我可以在端口8888上启动WebSocket,该端口未显示我检测到的任何错误,但当尝试连接到它时,我会收到上面的错误消息。这只是为了测试,我还没有SSL证书,但首先我想让它工作,还是我需要一个?我尝试了很多在网上找到的URL组合,但到目前为止没有一个有效

就在写这篇文章的时候,我注意到套接字是从
/var/www/html\u backend
启动的,而不是
/var/www/html\u backend/web
DocumentRoot
是否会导致代理问题

我希望有人能给我指出正确的方向,因为我找到的所有“有效”解决方案到目前为止都没有什么帮助


致以最诚挚的问候

我在Digitalocean用PHP Linux和ratchet构建了Websocket,它的工作中继很好(我的示例使用wss,但您也可以使用ws来实现)

我构建它的方式:

服务器端棘轮websocket:

$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
而不仅仅是在ratchet中使用以下命令运行php websocket:
php server.php

你可以走了。

检查你的端口是否打开。套接字服务器是一个痛苦的。。。。我不确定您打算使用它做什么,但您可能希望研究类似的东西,这是一个消息队列。完全成熟、易于使用、畅销等@ArtisticPhoenix这不是我第一次听说插座。。。xD,但是的,端口是开放的。大约3年前,我做了一个实验,然后决定使用RabbitMq,因为它有更多我希望构建或维护的功能。我会看一看,但现在我很想让它工作,只是为了它。你没有尝试
::1
,但我怀疑这是个问题。你用的是什么浏览器,Chrome?我刚读到chrome不允许非SSL连接,你可以试试FIrefox。我决不会建议你尝试IE或Edge,我经历了IE6天。。。当使用
新的WsServer(..)时,loliswss2是默认路由?您是否已在非默认端口/将
wss://your.domain:8080/wss2/
在JS中也能正常工作?这不是默认设置,这就是我们配置httpd ssl文件(默认设置:your.domain)的原因。您必须在服务器和客户端中使用相同的端口,但我的意思是,在我的代码中,现在我有了这个
$app->route('/chat',new chat())和在我的vhost
ProxyPass”/chat/“ws://localhost:8888/”
中。我是否必须连接到
ws://your.domain:8080/chat/chat
才能完成该路线,或者该路线是如何工作的?但我稍后将尝试您的服务器创建代码。=)将端口添加到路由,并在js中将其更改为:ws://your.domain/chat(或者试试我的完整评论)
<VirtualHost _default_:443>
ProxyPass /wss2/ ws://your.domain:8000
wss://your.domain/wss2/