Отправка данных из PHP Client в PHP Webserver Socket - PullRequest
0 голосов
/ 10 июня 2018

Мне нужно отправить некоторые данные на сервер веб-сокетов одним способом (что-то вроде push-уведомления) из PHP-клиента, но у меня возникают проблемы с этим.

Сервер веб-сокетов PHP работает правильно, если яоткройте несколько вкладок из браузера, после чего сервер сможет получать и отправлять сообщения, но у меня есть еще один микро-сервис на PHP, и теперь я хочу отправить push-уведомление на сервер веб-сокетов с помощью PHP, но я не знаю, как это сделать.

Thw сервер веб-сокетов запущен на ws: //0.0.0.0: 8020

Я пытаюсь что-то вроде этого:

<?php
$host    = "localhost";
$port    = 8020;
$message = "Hello Server";
echo "Message To server :".$message;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Fail1\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Fail2\n");
var_dump($socket);
var_dump($result);
?>

ps Сервер веб-сокетов PHP иPHP-клиент находится на той же машине, я пробовал также с межпроцессным сокетом, но безуспешно.

1 Ответ

0 голосов
/ 10 июня 2018

Наконец-то я нашел решение, вот мой окончательный рабочий код:

<?php

$host    = "localhost";
$port    = 8020;

$context = stream_context_create();

$socket = @stream_socket_client(
    $host . ':' . $port,
    $errno,
    $errstr,
    30,
    STREAM_CLIENT_CONNECT,
    $context
);

$key = generateWebsocketKey();
$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-Key: $key\r\n\r\n";
stream_socket_sendto($socket, $headers);
stream_socket_sendto($socket, 'this is my socket test to websocket');

function generateWebsocketKey() {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"$&/()=[]{}0123456789';
    $key = '';
    $chars_length = strlen($chars);
    for ($i = 0; $i < 16; $i++) $key .= $chars[mt_rand(0, $chars_length-1)];
    return base64_encode($key);
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...