2015-03-17 3 views
5

Я новичок об этом WebSocket, и я пытаюсь это Ratchet для моего первого проекта ..Ratchet: Still Подключения государства

Я сделал установку учебника в http://socketo.me, выполнив эту команду в командной строке

composer require cboden/ratchet

после этого, он автоматически генерирует vendor папку с парой там и найти библиотеки на домашнем пути а composer.json и composer.lock

Затем я сделал chat.php файл и скопировать код из быстрого примера на храповом мерзавце, который:

<?php 
use Ratchet\MessageComponentInterface; 
use Ratchet\ConnectionInterface; 

    // Make sure composer dependencies have been installed 
    require __DIR__ . '/vendor/autoload.php'; 

/** 
* chat.php 
* Send any incoming messages to all connected clients (except sender) 
*/ 
class MyChat implements MessageComponentInterface { 
    protected $clients; 

    public function __construct() { 
     $this->clients = new \SplObjectStorage; 
    } 

    public function onOpen(ConnectionInterface $conn) { 
     $this->clients->attach($conn); 
    } 

    public function onMessage(ConnectionInterface $from, $msg) { 
     foreach ($this->clients as $client) { 
      if ($from != $client) { 
       $client->send($msg); 
      } 
     } 
    } 

    public function onClose(ConnectionInterface $conn) { 
     $this->clients->detach($conn); 
    } 

    public function onError(ConnectionInterface $conn, \Exception $e) { 
     $conn->close(); 
    } 
} 

    // Run the server application through the WebSocket protocol on port 8080 
    $app = new Ratchet\App('localhost', 8080); 
    $app->route('/chat', new MyChat); 
    $app->route('/echo', new Ratchet\Server\EchoServer, array('*')); 
    $app->run(); 

Затем я выполнить эту команду в командной строке: php chat.php

Я все еще имеющая ошибку в моей стороне клиента изречение:

Chrome Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.

Firefox InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable

Мой folderization (на XAMPP):

Client

htdocs/public/chat/index.php с common.js неповрежденными, который содержит

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

Сервер

htdocs/public/chatserver/chat.php 
htdocs/public/chatserver/vendor/<some libraries> 
htdocs/public/chatserver/composer.json 
htdocs/public/chatserver/composer.lock 

Я что-то пропустил?

ответ

9

пожалуйста, попробуйте так:

var conn = new WebSocket('ws://localhost:8080/echo'); 
conn.onmessage = function(e) { console.log(e.data); }; 
conn.onopen = function(e) { 
    console.log("Connection established!"); 
    conn.send('Hello Me!'); 
}; 

вы должны быть в состоянии отправить, когда соединение открыто. Кажется, что вы пытаетесь сделать это до установления соединения.

+0

Это исправляет ошибку, пока сообщение не было получено подключенными клиентами. – Roi

+0

Возможно, вам нужно подключиться к '' ws: // localhost: 8080/chat', если клиент должен что-то получить. Вы добавили маршрут/чат, где происходит логика вещания. Я не знаком с эхо-сервером. – steven

+0

В любом случае, это помогло мне двигаться дальше. – Roi

Смежные вопросы