Node.jsでSocket.IOを利用したサーバーを建てていて、そこにPHPのPawlというWebSocket接続ライブラリーを使用して接続しようと、早速簡単なコードを組んでみたのですが、「Connection closed before handshake」というエラーが返されました。
組んだコードは次のようになっています。
↓Node.js側↓
JavaScript
1~省略~ 2chat = io.sockets.on('connection', function(socket) { 3 socket.emit('connected'); 4 5 socket.on('roomin', function(req) { 6 socket.join(req.id); 7 var id = socket.id; 8 chat.to(id).emit('donejoin'); 9 }); 10 11 socket.on('send', function(req){ 12 chat.to(req.id).emit('get', { 'name': req.name, 'message': req.message }); 13 }); 14~省略~
↓PHP側↓
PHP
1<?php 2 3require __DIR__ . '/vendor/autoload.php'; 4 5$loop = React\EventLoop\Factory::create(); 6$connector = new Ratchet\Client\Connector($loop); 7 8$connector('ws://192.168.1.10:3000', ['protocol1', 'subprotocol2'], ['Origin' => 'http://192.168.1.10'])->then(function(Ratchet\Client\WebSocket $conn) { 9 $conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) { 10 echo "Received: {$msg}\n"; 11 $conn->close(); 12 }); 13 14 $conn->on('close', function($code = null, $reason = null) { 15 echo "Connection closed ({$code} - {$reason})\n"; 16 }); 17 $ary = array("id"=>"123456"); 18 $result = json_encode($ary); 19 $conn->send('roomin', $result); 20 21 $ary2 = array("name"=>"TEST", "message"=>"TESTMESSAGE"); 22 $result2 = json_encode($ary2); 23 $conn->send('send', $result2); 24 25}, function(\Exception $e) use ($loop) { 26 echo "Could not connect: {$e->getMessage()}\n"; 27 $loop->stop(); 28 }); 29 30$loop->run();
接続先のIPとイベントの所だけ書き換えました。
PHPでSocket.IO用のライブラリーを使うのが一番良いのはわかっているのですが、このようなライブラリーを使ってみてもクラスが見つからないというエラーが吐かれたまま解決できずに結構日が立ってしまったので諦めてしまいました...
PHP
1require_once __DIR__ . '/vendor/autoload.php'; 2use PHPSocketIO\SocketIO; 3use Workerman\Worker;
と記述するとSocketIOというクラスが見つからないというエラーです。
実行するphpファイルがあるディレクトリーにPHPSocketIOというフォルダーが合って更にその中にSocket.IOというクラスのSocket.IO.phpというファイルが配置されているのですが...
よろしければ、「Node.jsのSocket.IOサーバーにWebSocketクライアントから接続する方法」、もしくは先程のライブラリーのクラスエラーを無くす方法がありましたら、ご回答よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/07 11:38
2017/03/07 11:44
2017/03/07 13:06
2017/03/07 13:15
2017/03/07 13:17
2017/03/08 13:43