📜  向 PC 发送通知 php - PHP (1)

📅  最后修改于: 2023-12-03 14:50:41.256000             🧑  作者: Mango

向 PC 发送通知 php - PHP

有时候,我们需要从后端发送通知给前端。PHP 可以通过与前端之间的 WebSocket 连接来做到这一点。在本篇文章中,我们将介绍如何使用 PHP 和 Swoole 扩展来实现向 PC 发送通知。

准备工作

首先,我们需要有一个运行 PHP 的服务器,并已经安装了 Swoole 扩展。如果还没有安装,请根据 Swoole 官方文档 进行安装。

创建 WebSocket 服务

我们可以使用 Swoole 的 WebSocket 类来创建 WebSocket 服务。下面就是一个简单的示例代码:

<?php

$server = new Swoole\WebSocket\Server('0.0.0.0', 8080);

$server->on('open', function (Swoole\WebSocket\Server $server, Swoole\Http\Request $request) {
    echo "connection open: {$request->fd}\n";
});

$server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) {
    echo "received message: {$frame->data}\n";
});

$server->on('close', function (Swoole\WebSocket\Server $server, $fd) {
    echo "connection close: {$fd}\n";
});

$server->start();

这个示例代码创建了一个在 8080 端口监听所有 IP 的 WebSocket 服务。当客户端连接上时,服务端会输出 "connection open";当客户端发来消息时,服务端会输出 "received message";当客户端断开连接时,服务端会输出 "connection close"。

发送通知给 PC

要将通知发送给 PC,我们需要在服务端中保存客户端的 WebSocket 连接对象。我们可以使用一个数组来保存所有连接的客户端。下面是修改后的示例代码:

<?php

$clients = [];
$server = new Swoole\WebSocket\Server('0.0.0.0', 8080);

$server->on('open', function (Swoole\WebSocket\Server $server, Swoole\Http\Request $request) use (&$clients) {
    $clients[$request->fd] = $request->fd;
});

$server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) use (&$clients) {
    foreach ($clients as $client) {
        $server->push($client, $frame->data);
    }
});

$server->on('close', function (Swoole\WebSocket\Server $server, $fd) use (&$clients) {
    unset($clients[$fd]);
});

$server->start();

这个示例代码中,我们在 $clients 数组中保存了所有的客户端连接。当客户端连接上时,我们将 fd 保存到 $clients 中;当客户端断开连接时,我们从 $clients 中移除该连接。当客户端发送消息时,我们遍历 $clients 数组,并使用 $server->push($client, $frame->data) 将消息发送给每一个客户端。

运行 WebSocket 服务

要运行 WebSocket 服务,只需要将上面的代码保存为 websocket.php 并在终端执行 php websocket.php 即可。服务端会一直运行,直到我们使用 Ctrl + C 组合键将其停止。

在前端中接收通知

最后,在前端页面中,需要使用 JavaScript 来创建一个 WebSocket 连接,来与服务端建立连接并接收通知。下面是一个示例代码:

const ws = new WebSocket('ws://localhost:8080');

ws.onmessage = function (event) {
    console.log(event.data);
};

ws.onclose = function () {
    console.log('WebSocket closed');
};

在这个示例代码中,我们创建了一个连接到 localhost:8080 的 WebSocket 连接。当服务端发送通知时,我们打印出接收到的数据;当连接关闭时,我们打印出 "WebSocket closed"。

现在,当我们在服务端使用 $server->push() 发送数据时,就可以在前端页面中接收到通知了。

总结

在本篇文章中,我们介绍了如何使用 PHP 和 Swoole 扩展来向 PC 发送通知。我们创建了一个 WebSocket 服务,并在服务端使用 $server->push() 方法来向所有客户端发送通知;在前端中,我们使用 JavaScript 创建了一个 WebSocket 连接来接收通知。我希望这篇文章对你有所帮助。