Я пытаюсь сделать WebSocket с PHP. И Клиент является приложением javascript. Я могу отправить данные из WebSocket клиенту. Но если я попытаюсь отправить информацию с Клиента на Сервер, сообщение будет выглядеть так: « @ u¹ ‰; WØë # Wƒ«! Ï «=".
Я пытался json_decode / strval, но это не работает. Я также пытался в Javascript отправлять нормально с (socket.send ("abc")). и JSON objectsocket.send (JSON.stringify ({"abc": "abv")));
Вот код php:
<?php
/**
* Created by PhpStorm.
* User: rfur
* Date: 07.09.2018
* Time: 09:23
*/
// not my code
$address = '10.10.20.212';
$port = 1414;
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($server, $address, $port);
socket_listen($server);
$client = socket_accept($server);
$request = socket_read($client, 5000);
preg_match('#Sec-WebSocket-Key: (.*)\r\n#', $request, $matches);
$key = base64_encode(pack(
'H*',
sha1($matches[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
));
$headers = "HTTP/1.1 101 Switching Protocols\r\n";
$headers .= "Upgrade: websocket\r\n";
$headers .= "Connection: Upgrade\r\n";
$headers .= "Sec-WebSocket-Version: 13\r\n";
$headers .= "Sec-WebSocket-Accept: $key\r\n\r\n";
socket_write($client, $headers, strlen($headers));
while (true) {
sleep(1);
$content = 'Now: ' . time();
$response = chr(129) . chr(strlen($content)) . $content;
socket_write($client, $response);
echo "socket_read: " . socket_read($client ,1024) . "\n";
socket_write($client, $response);
echo "var_dump socket_read: " . var_dump(socket_read($client,1024)) .
socket_write($client, $response);"\n";
echo "json_decode socket_read: " . json_decode(socket_read($client,1024)) . "\n";
socket_write($client, $response);
echo "var_dump json_decode socket_read: " . var_dump(json_decode(socket_read($client,1024))) . "\n";
}
и вот код клиента:
<html>
<body>
<div id="root"></div>
<script>
var host = 'ws://10.10.20.212:1414/websockets.php';
var socket = new WebSocket(host);
socket.onmessage = function(e) {
document.getElementById('root').innerHTML = e.data;
socket.send("abc");
};
</script>
</body>
</html>
вывод выглядит так:
socket_read: �ƒÛ¸b¹z
string(9) "�ƒPÂMn2¡"
var_dump socket_read:
json_decode socket_read:
NULL
var_dump json_decode socket_read: