2016-05-11 2 views
0

Я пытаюсь сделать чат с помощью WebSocket. В этой цели я использую Ratchet.Почему мой клиент WebSocket всегда перезагружается после отправки сообщения?

Для этого я использую руководство от Ratchet: http://socketo.me/docs/hello-world

Моя проблема заключается в том, что после отправки сообщения, обновления страницы без реализации кода для него.

index.html:

<html> <!-- index.html --> 
<head> 
</head> 
<body> 
    <h1>Menu</h1> 
    <h2>Create a chat server on port 8080</h2> 
    <button><a href="chat-server.php">Here</a></button> 
    <hr> 
    <h2>Join the chat server on port 8080</h2> 
    <button><a href="chat-client.php">Here</a></button> 
    <p>You'll have an error if it doesn't exist !</p> 
</body> 
</html> 

connection.js:

var conn; 
function init(){ 
    console.log("function : init"); 
    conn = new WebSocket('ws://localhost:8080'); 
    console.log(conn); 
    conn.onopen = function(e) { 
     var co = document.getElementById("connection"); 
     co.innerHTML="Connection established !"; 
}; 
conn.onmessage = function(e) { 
    var content = document.getElementById("chat"); 
    content.innerHTML = content.innerHTML + "<li>"+ e.data+"</li>"; 
}; 
conn.onclose = function(){ 
    var co = document.getElementById("connection"); 
    co.innerHTML="Connection closed !"; 
} 
conn.onerror = function(){ 
    alert("Connection failed : There in no server on this port !"); 
} 
} 
function closeCon(){ 
    conn.close(); 
} 
function sendMessage(){ 
    var mes = document.getElementById("message").value; 
    conn.send(mes, function(event){ 
     event.preventDefault(); 
     console.log(event); 
    }); 
} 

чат-client.php:

<html><!-- chat-client.php --> 
<head> 
    <script src="../js/connection.js"></script> 
</head> 
<body onload="init()"> 
<h1>Chat in web browser</h1> 
<p id="connection"> Connection closed !</p> 
<div> 
    <ul id="chat"> 

    </ul> 
    <form> 
     <input id="message" style="border: 1;"> 
     <button onclick="sendMessage()">Send</button> 
    </form> 
</div> 
<hr> 
<button onclick="closeCon()"><a href="index.html">Back to the menu</a></button> 
</body> 
</html> 

чат-server.php:

<h1>Welcome on your server on port 8080</h1> 

<?php 
use Ratchet\Server\IoServer; 
use Ratchet\Http\HttpServer; 
use Ratchet\WebSocket\WsServer; 
use MyApp\Chat; 

// cd /Applications/MAMP/htdocs/MyRatchetFirstApp/ 
require dirname(__DIR__) . '/vendor/autoload.php'; 

$server = IoServer::factory(
    new HttpServer(
     new WsServer(
      new Chat() 
     ) 
    ), 
    8080 
); 
$server->run(); 

Chat.php:

<?php //Chat.php 
namespace MyApp; 
use Ratchet\MessageComponentInterface; 
use Ratchet\ConnectionInterface; 

class Chat implements MessageComponentInterface { 
    protected $clients; 

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

    public function onOpen(ConnectionInterface $conn) { 
    // Store the new connection to send messages to later 
     $this->clients->attach($conn); 
     echo "New connection! ({$conn->resourceId})<br/>"; 
    } 

    public function onMessage(ConnectionInterface $from, $msg) { 
     $numRecv = count($this->clients) - 1; 
     foreach ($this->clients as $client) { 
      if ($from !== $client) { 
      // The sender is not the receiver, send to each client connected 
       $client->send($msg); 
      } 
     } 
     echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "<br/>", $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's'); 
    } 

    public function onClose(ConnectionInterface $conn) { 
    // The connection is closed, remove it, as we can no longer send it messages 
     $this->clients->detach($conn); 
     echo "Connection {$conn->resourceId} has disconnected<br/>"; 
    } 
    public function onError(ConnectionInterface $conn, \Exception $e) { 
     echo "An error has occurred: {$e->getMessage()}<br/>"; 
     $conn->close(); 
    } 
} 

composer.json:

{ 
    "autoload": { 
     "psr-0": { 
      "MyApp": "src" 
     } 
    }, 
    "require": { 
     "cboden/ratchet": "0.3.*" 
    } 
} 

И, наконец, здесь, то tree of this project

+1

Вы должны добавить код своей страницы в строку. – wonko79

+0

Так это перезагружает страницу после нажатия кнопки? или после отправки сообщения в розетку? – mitchken

+0

Да, он перезагружает страницу после отправки сообщения. Мы можем заметить, что, поскольку другие клиенты получили сообщение. –

ответ

1

Это было как раз на кнопку, чтобы отправить сообщение было в форме. Затем, когда я «отправлю» его, он обновил страницу. Если вы хотите иметь историю сообщений, вы должны удалить эту форму.

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