簡體   English   中英

將數據從PHP客戶端發送到PHP Web服務器套接字

[英]Send data from PHP Client to PHP Webserver Socket

我需要以某種方式(例如推送通知消息)從PHP客戶端向Websocket服務器發送一些數據,但是這樣做有問題。

PHP Websocket服務器正常工作,如果我從瀏覽器中打開多個選項卡,則該服務器能夠接收和發送消息,但是我在PHP中有另一個微服務,現在我想使用PHP向Websocket服務器發送推送通知,但是我不知道該怎么辦。

Websocket服務器在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 websocket服務器和PHP客戶端在同一台機器上,我也嘗試使用進程間套接字,但是沒有運氣。

最后,我找到了解決方案,這是我的最終工作代碼:

<?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);
}

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM