2012-10-27 131 views
3

我嘗試通過WebSocket在我的symfony項目上創建一個簡單的聊天頁面。 首先,我用React-php庫,它完美地適用於終端,但是當我嘗試將其連接到瀏覽器我遇到這個錯誤對鉻:WebSocket無法建立到服務器的連接

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 

,並在Firefox

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

接下來我用Ratchet庫並按照教程,但仍然是同樣的問題,終端上工作,在瀏覽器上的錯誤。 我對瀏覽器端和JavaScript中使用telnet localhost 8000

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

服務器代碼陣營

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(); 

和服務器代碼棘輪

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(); 

的另一件事是客戶端網頁的網址爲localhost/X/chat和服務器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分機中。解決了。

相關問題