2017-08-28 14 views
0

Ratchetをlocalhostに設定しようとしていて、this tutorialに従っています。JavascriptがPHPに接続できませんラチェットWebSocketサーバ

私はComposerとRatchetをインストールしており、そのチュートリアルのPHPコードを正確にコピーしています。私がサーバを起動し、それにアクセスするためにtelnetを使用すると、問題はありません。うまくいきます。

しかし、JavaScriptを使用して(HTML5ウェブソケットを使用して)接続しようとすると、接続されません。要求がしばらく時間切れになります。私はPHPコンソールとtelnetでブラウザから送られた最初のHTTP要求メッセージを見ることができます。クライアントは明らかに「接続」できます。つまり、サーバがこの要求を認識しないかのように見えます。

StackOverflowや他の同様のサイトで他の人の問題を調べておきましたが、私がやったHTTP応答をサーバに返さなければならないとの人もいました(最近接続したクライアントにsendメソッドを使用)メッセージがGET HTTP/1.1で始まっている場合)。私はMDNでこれについていくつかの仕様を調べて、this guideを見つけましたが、私の実装は問題に影響を与えませんでした - JavaScriptはまだ接続できませんでした。私がハンドシェイクコードを間違って実装したためか、それとも単純に私の最初の問題の解決策ではなかったかどうかはわかりません。

WebSocket +ラチェットガイドには、これを実装する必要性について言及されていないため、これは問題ではないと思われます。

私はポート80808888の両方を試してみましたが、両方とも同じ結果があります。私はここではGoogle ChromeでMacOSで60

をXAMPPを私のJavaScriptコードされて使用しています。ここでは

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!"); 
    } 
} 

は私のPHPサーバーコード(bin/chat-server.php)です:

<?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):

答えて

0

したがって、手を実装する必要はありませんラチェットはあなたのためにこれを行います。

あなたは私が作業上持っているようなコードを取得するためにやらなければならないことは、あなたはそれがとても似の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(); 
関連する問題