2016-07-20 29 views
2

Ich bin ein Ratchet WebSocketServer in meinem Backend läuft dies alles funktioniert gut.Verbinden mit einem Ratschen Websocket-Server mit PHP

<?php 

require '../vendor/autoload.php'; 

use Ratchet\WebSocket\WsServer; 
use Ratchet\Http\HttpServer; 

$wsServer = new WsServer(new Chat()); 
$wsServer->disableVersion(0); 

$server = \Ratchet\Server\IoServer::factory(
    new HttpServer(
     $wsServer 
    ), 
    8080 
); 

$server->run(); 

Aber ich möchte eine Verbindung zum Websocket mit einem einfachen PHP-Skript, um eine Nachricht an den Server zu senden.

$host = 'ws://localhost'; //where is the websocket server 
$port = 8080; 
$local = "http://example.com"; //url where this script run 
$data = "first message"; //data to be send 

$head = "GET/HTTP/1.1"."\r\n". 
    "Upgrade: WebSocket"."\r\n". 
    "Connection: Upgrade"."\r\n". 
    "Origin: $local"."\r\n". 
    "Host: $host:$port"."\r\n". 
    "Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n". 
    "Content-Length: ".strlen($data)."\r\n"."\r\n"; 

//WebSocket handshake 
$sock = fsockopen($host, $port); 
fwrite($sock, $head) or die('error:'.$errno.':'.$errstr); 
$headers = fread($sock, 2000); 

echo $headers; 

fwrite($sock, $data) or die('error:'.$errno.':'.$errstr); 
$wsdata = fread($sock, 2000); 
fclose($sock); 

Aber der Fehler, den ich erhalte, ist.

Dann wenn ich den Host ändern und nicht die ws: // und es sagt.

error:111:Connection refused 

Hat jemand eine Idee, wie Daten zu einem laufenden Ratchet WebSocket Server aus einer einfachen PHP-Datei senden?

Antwort

2

Ich habe dieses Projekt neben Ratchet versucht, und es funktioniert perfekt als PHP-Client:

https://github.com/Textalk/websocket-php

mit Install: composer require textalk/websocket 1.0.*

Und ein Anwendungsbeispiel:

<?php 

require('vendor/autoload.php'); 

use WebSocket\Client; 

$client = new Client("ws://127.0.0.1:1234"); 
$client->send("Hello from PHP"); 

echo $client->receive() . "\n"; // Should output 'Hello from PHP' 

Ich habe getestet, und das funktioniert auch mit SSL, wenn Sie wss: // (für Remote-Websockets verwenden).

+0

@ Raisin.can wir senden Byte-Array mit dieser Bibliothek über Websocket in PHP – iCoders

+0

Die Bibliothek erwartet, dass die Funktion send() eine Zeichenfolge übergeben wird. Wenn Sie Ihren Server in PHP haben (z. B. Ratchet), könnten Sie einfach das Byte-Array auf dem Client serialisieren und der Server unserialisieren. Wenn nicht alle Nachrichten, die auf Ratchet empfangen werden, Byte-Arrays sein werden, sollten Sie diese Nachrichten wie Byte_Array: a: 44: {i: 1; i: 84; ...etc. – RaisinBranCrunch

+0

ya, wenn ich selialize dann sein Senden als eine Zeichenfolge, aber für mich empfangende Seite ist nur Byte-Array, so kann nicht serialisieren. – iCoders