Javascript无法连接到PHP Ratchet WebSocket服务器

时间:2017-08-28 20:58:44

标签: javascript php html5 websocket ratchet

我一直在尝试在localhost上配置Ratchet,并一直关注this tutorial

我已经安装了Composer和Ratchet,并且完全复制了该教程中的PHP代码。当我运行服务器并使用telnet访问它时,我没有问题,它运行正常。

但是,当我尝试使用JavaScript建立连接(使用HTML5 websockets)时,它不会连接 - 请求只是在一段时间后超时。我可以在PHP控制台和telnet中看到我的浏览器发送的初始HTTP请求消息,因此客户端显然可以" connect"很好 - 看起来好像服务器没有确认这个请求。

我事先在StackOverflow和其他类似网站上查看了其他人的问题,有些人提到服务器必须发回HTTP回复,我试过这样做(使用{{1}最近连接的客户端的方法,如果他们的消息以send开头。我在MDN上查找了一些相关的规范,并找到this guide,但我对它的实现对问题没有影响 - JavaScript仍然无法连接。我不确定这是因为我错误地实现了握手代码,或者它是不是我最初问题的解决方案。

WebSocket + Ratchet指南都没有提到实现这一点的必要性,所以我怀疑这可能不是问题。

我尝试了两个端口GET HTTP/1.18080,两者都有相同的结果。我在Google Chrome 60中的macOS上使用XAMPP。

这是我的JavaScript代码:

8888

这是我的PHP服务器代码(window.onload = function() { var conn = new WebSocket('ws://localhost:8080'); conn.onmessage = function(e) { console.log(e.data); } conn.onopen = function(e) { console.log("Connection established!"); } } ):

bin/chat-server.php

这是Chat类(<?php use Ratchet\Server\IoServer; use MyApp\Chat; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new Chat(), 8080 ); $server->run(); ):

src/MyApp/Chat.php

1 个答案:

答案 0 :(得分:0)

所以,你不需要实现握手,Ratchet会为你做这件事。

所有你需要做的就是像我上面那样获得代码,确保你使用像这样的WebServer:

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();