2012-10-27 8 views
3

WebSocket을 통해 symfony 프로젝트에서 간단한 채팅 페이지를 만들려고합니다. 우선은 React-php 라이브러리가 완벽 터미널에서 작동을 사용하지만 브라우저에 연결하려고 할 때 나는 크롬에이 오류에 직면WebSocket이 서버에 연결할 수 없습니다.

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 

와 파이어 폭스

Firefox can't establish a connection to the server at ws://localhost:8000/. 

에 다음으로 Ratchet 라이브러리를 사용 튜토리얼을 따르되 여전히 동일한 문제, 터미널에서 작업, 브라우저의 오류. 내가 브라우저 단자와 자바 스크립트에 telnet localhost 8000 사용하는 또 다른 것은 클라이언트 페이지 URL localhost/X/chat입니다

var conn = new WebSocket('ws://localhost:8000'); 
conn.onmessage = function(e) { 
    console.log(e.data); 
}; 
conn.send('Hello World!'); 

래칫

require __DIR__ . '/../vendor/autoload.php'; 
require __DIR__ . '/chat.php'; 
use Ratchet\Server\IoServer; 
use Ratchet\WebSocket\WsServer; 
use MyApp\Chat; 
$server = IoServer::factory(new WsServer(new Chat()), 8000); 
$server->run(); 

에 대한

require __DIR__.'/../vendor/autoload.php'; 
$loop = React\EventLoop\Factory::create(); 
$socket = new React\Socket\Server($loop); 
$conns = new \SplObjectStorage(); 
$socket->on('connection', function ($conn) use ($conns) { 
    $conns->attach($conn); 
    $conn->on('data', function ($data) use ($conns, $conn) { 
     foreach ($conns as $current) { 
      if ($conn === $current) { 
       continue; 
      } 
      $current->write($data); 
     } 
    }); 
    $conn->on('end', function() use ($conns, $conn) { 
     $conns->detach($conn); 
    }); 
}); 
$socket->listen(8000); 
$loop->run(); 

와 서버 코드 반응의 서버 코드 그리고 서버 localhost/X/server, 내가 시도한 ws://localhost:8000/X/server하지만 여전히 작동하지 않습니다

답변

1

연결이 설정되기 전에 send으로 전화를 걸 수 없습니다. onopen 이벤트에 바인딩해야합니다.

var conn = new WebSocket('ws://localhost:8000'); 
conn.onmessage = function(e) { 
    console.log(e.data); 
}; 
conn.onopen = function() { 
    conn.send('Hello World!'); 
}; 

이렇게하면 문제가 해결됩니다.

+0

아니요, httP를 사용하지만 여전히 작동하지 않습니다. – Erfan

+0

2 라운드, 나는 나의 대답을 편집했다. – igorw

+0

연결이 올바르다면'conn.send()'를 사용할 수 있습니다. 그러나 귀하의 코드를 시도했지만 여전히 작동하지 않습니다. – Erfan

1

문제는 cURL입니다. 해결되었습니다.

관련 문제