如何使用PHP连接websocket推送数据,本文介绍发送json数据过程遇到的无法发送问题,并解决数据多的情况出现无法推送问题,供大家参考和使用:直接上代码
<?php
public function message(){
// WebSocket 客户端代码
$host = '127.0.52.330'; // 你的 WebSocket 服务器主机
$port = 9502; // 你的 WebSocket 服务器端口
// 创建一个 TCP/IP 套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 连接到 WebSocket 服务器
if ($socket === false || !socket_connect($socket, $host, $port)) {
echo "连接到 WebSocket 服务器失败";
exit;
}
// WebSocket 握手
$secKey = base64_encode(random_bytes(16)); // 生成一个随机密钥用于握手
$upgradeHeader = "GET / HTTP/1.1\r\n" .
"Host: $host:$port\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"Sec-WebSocket-Key: $secKey\r\n" .
"Sec-WebSocket-Version: 13\r\n\r\n";
// 发送握手请求到服务器
socket_write($socket, $upgradeHeader);
// 读取服务器的响应(应该是一个 WebSocket 握手响应)
$response = socket_read($socket, 2048);
// 要发送的数据
$data = json_encode([
'userId' => 11,
'yy_tel' => 123456788,
'yy_name' => '比你好',
'pro_id' => 1,
'earId' => 22,
'cateId' => 11,
'appointment_date' => '2024-05-12',
'appointment_time' => '15:00',
'status' => 0,
'created_time' => time(),
]);
// 构造 WebSocket 帧
$frame = "\x81"; // FIN + 文本数据帧(10000001)
$length = strlen($data);
if ($length <= 125) {
$frame .= chr($length);
} elseif ($length <= 65535) {
$frame .= chr(126) . pack("n", $length);
} else {
$frame .= chr(127) . pack("NN", 0, $length);
}
$frame .= $data;
// 发送数据帧到服务器
$bytesSent = socket_write($socket, $frame);
// 检查数据是否成功发送
if ($bytesSent === false) {
echo "发送数据到服务器失败";
} elseif ($bytesSent < strlen($frame)) {
echo "数据发送到服务器不完整";
} else {
echo "数据成功发送到服务器";
}
// 关闭套接字连接
socket_close($socket);
}
?>遇到的问题:网上找了很多方法,json数据一多会出现乱码,关键采用一下这部分代码可以解决改问题
<?php
// 构造 WebSocket 帧
$frame = "\x81"; // FIN + 文本数据帧(10000001)
$length = strlen($data);
if ($length <= 125) {
$frame .= chr($length);
} elseif ($length <= 65535) {
$frame .= chr(126) . pack("n", $length);
} else {
$frame .= chr(127) . pack("NN", 0, $length);
}
?>
关于简忆
简忆诞生的故事



粤ICP备16092285号
文章评论(0)