ここでまず背景を説明します。
私の目的は、Ratchet WebSockets を使用して双方向のクライアント/サーバー通信を作成することです。
ここで説明されているように、ラチェットと付属のソフトウェアをインストールしました。
ここで説明されているように、Hello World アプリケーションを正常に作成しました。
今、このチュートリアルを使用してプッシュ機能を作成しようとしています。私はコードをコピーし、わずかに変更し (以下のコード コメントに記載されている変更)、ZMQ ライブラリをインストールしました (最新バージョン、php.ini に追加し、表示されます
php -m
- 要するに、正しくインストールされています)。しかし、WebSocket は機能しません。
以下に、私のドメインへの実際のライブリンクを使用してテストプロセスを提供しますので、ご自分で確認してください.
私のプッシュ サーバーは、チュートリアルのサーバーとまったく同じで、IP がサーバーの IP に変更されています。これを SSH 経由で実行すると、正しく接続されているようです。
私の Pusher クラスは MyApp 名前空間にあり、チュートリアルと同じコードと同じ相対位置にあります。
MySQL クエリを気にする必要がないため、私の post.php は少し変更されています。
$entryData = array( //hard-coded content of $entryData for simplicity
'cat' => "macka"
, 'title' => "naslov"
, 'article' => "tekst"
, 'when' => time()
);
// This is our new stuff
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://light-speed-games.com:5555"); //my domain, still using port 5555 as in their example
$socket->send(json_encode($entryData));
このファイルはここにあります。
- 私のclient.phpは、IEが動作するように少し修正を加えなければならなかったことを除けば、彼らのものと同じ
when.js
です。私の問題はブラウザに依存せず、修正が追加される前と同じです。
<script>
window.define = function(factory) { //my addition
try{ delete window.define; } catch(e){ window.define = void 0; } // IE
window.when = factory();
};
window.define.amd = {};
</script>
<script src="/apps/scripts/when.js"></script>
<script src="http://autobahn.s3.amazonaws.com/js/autobahn.min.js"></script>
<script>
var conn = new ab.Session(
'ws://light-speed-games.com:8080' // The host (our Ratchet WebSocket server) to connect to
, function() { // Once the connection has been established
conn.subscribe('kittensCategory', function(topic, data) {
// This is where you would add the new article to the DOM (beyond the scope of this tutorial)
console.log('New article published to category "' + topic + '" : ' + data.title);
});
}
, function() { // When the connection is closed
console.warn('WebSocket connection closed');
}
, { // Additional parameters, we're ignoring the WAMP sub-protocol for older browsers
'skipSubprotocolCheck': true
}
);
</script>
このファイルはここにあります。
理論的には、これが起こるはずです(たとえば):client.php
コンソールをオンにしてChromeで開きます。post.php
次に、Firefoxで開きます。Chrome のコンソールには、「新しい記事が公開されました...」などのメッセージが表示されます ( のconn.subscribe
関数からclient.php
)。しかし、私がこれを行うと、何も起こりません。push-server.php
接続は開いたままです ( SSHでオフにするまで、「接続が閉じられました」というエラーは表示されません)。コンソールは空のままです。
過去数日間の関連情報はこれですべてだと思います。その大部分は、これを理解するために費やしました。ただし、問題がコードにあるのか、それとも私が気付いていないサーバー構成設定にあるのかを確認することさえできませんでした. だから、誰かが私を正しい方向に向けてくれることを願ってあなたのところに来ます。
重要な編集
問題は、Autobahn.js メソッドconn.subscribe
が正しく機能していないことにあると確信しています。接続が確立されています。コードを次のように変更すると:
function() { // Once the connection has been established
console.log('Connection established');
conn.subscribe('kittensCategory', function(topic, data) {
// This is where you would add the new article to the DOM (beyond the scope of this tutorial)
console.log('New article published to category "' + topic + '" : ' + data.title);
});
}
次にConnection established
、コンソールに正しく表示されます。したがって、subscribe メソッドのトラブルシューティングを行う必要があると思います。誰かがそれがどのように機能するか、そして「トピック」と「データ」が正確に何であるかを説明できれば、それは大きな助けになるでしょう. Autobahn のドキュメントでは、このメソッドの引数として URL を使用しています (こちらを参照)。