PHP Ratchet无法从其他设备连接

问题描述:

我开始使用PhP棘轮插口。遵循指南,我可以创建一个简单的聊天应用程序,并在同一台计算机上工作。例如,如果我打开chrome和firefox,我可以交互发送和接收消息,好的。PHP Ratchet无法从其他设备连接

问题是,当我尝试使用另一台计算机上的聊天应用程序,但在同一网络连接中,或者甚至当我试图在线测试它时。

当使用局域网时,其他计算机无法连接到套接字并且在线无法连接。

通过环顾四周,我发现使用'0.0.0.0'甚至端口5555来启用任何人的连接。但即使使用这个,我也无法连接。

我该如何解决这个问题?这是我的文件:

server.php

<?php 

    use Ratchet\Server\IoServer; 
    use Ratchet\http\HttpServer; 
    use Ratchet\WebSocket\WsServer; 

    require __DIR__ . '/../vendor/autoload.php'; 

    $server = IoServer::factory(
     new HttpServer(
      new WsServer(
       new Chat() 
      ) 
     ), 2000, '0.0.0.0' 
    ); 

    $server->run(); 

?> 

和客户端的js文件:

var socket = new WebSocket('ws://127.0.0.1:2000'); 
+0

在客户端,你试过使用服务器地址而不是'127.0.0.1',就像'192.xxx.xxx.xxx' – codisfy

+0

@codeHeart在本地主机上工作,但如何使它在线工作? – celsomtrindade

127.0.0.1总是点到本地设备,其中,在比插座等设备服务器,将而不是指向承载套接字服务器的设备。如果运行套接字服务器的设备不能从Internet路由,您将无法通过Internet连接到套接字。

您可以从LAN上的其他设备进行测试,方法是确定运行服务器的设备的网络IP地址。然后在您的客户端代码中,连接到 IP。它可能会接近192.168.x.x,例如192.168.1.12(它也可以在10.x.x.x172.16.x.x地址空间中)。然后,只需使用该地址从您的客户端脚本连接来进行测试:

var socket = new WebSocket('ws://192.168.1.12:2000'); 

您可能仍然会碰到麻烦,如果出于某种原因,你的网络被配置为在端口2000丢弃数据包。如果是这样,您应该很容易地为您的服务器和客户端更改为不同的端口。

+0

在本地主机上,我现在可以测试了。但是在网上使用它时我仍然遇到问题。我得到这个错误:''WebSocket'执行失败'发送':当我尝试发送时仍处于CONNECTING状态。或者如果我等待,它不会连接,并且还会返回一个错误'失败:连接建立时出错:net :: ERR_CONNECTION_TIMED_OUT' – celsomtrindade

+0

'online'是什么意思?您是否将此部署到位于不在您的网络上的某个服务器上的网站?我上面的答案只适用于与套接字服务器在同一网络上的设备 –

+0

是的,我试图在网站上在线测试它。本地主机工作得很好,比我在我的网站上尝试它并得到这些错误。 Ps:使用127.0.0.1 – celsomtrindade