php - 将数据从PHP客户端发送到PHP Web服务器套接字

标签 php sockets websocket

我需要以某种方式(例如推送通知消息)将数据从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);
?>

p.s. 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);
}

?>

关于php - 将数据从PHP客户端发送到PHP Web服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50785545/

相关文章:

c - 在原始套接字上 Ping 数据包

javascript - 安装 Nodejitsu

websocket - Nuxt Apollo websockets 链接选项?

javascript - 在 Electron Node 中创建 websocket 服务器以供外部客户端请求

javascript - 如何根据选择输入使用javascript更改页面内容?

php - 一对多关系删除 Doctrine 中的外键

java - 将文件从服务器发送到客户端而不逐行发送

sockets - 如果不需要回退,使用WebSocket API代替Socket.io有任何优势吗?

php - 在一个查询中计算两个字段的问题

php - PHP和Javascript之间的加密/解密