1 php7.4 中开发一个websocket 聊天 前端用uniapp

开发环境

php 7.4
安装composer require workerman/workerman
<?php
global $wss;

use Workerman\Worker;
use Workerman\Lib\Timer;

require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/config/config.php';

// 创建一个WebSocket服务器

$ws_worker = new Worker($wss);

// 存储用户与群组的映射
$groups = [];
// 存储被踢出用户的信息
$kickedUsers = [];
// 存储每个群组中的用户列表
$groupUsers = [];
// 当有客户端连接时
//输出一条连接信息。
//设置消息处理函数。
//根据接收到的消息中的 'action' 字段,调用相应的处理函数。
$ws_worker->onConnect = function ($connection) use (&$groups, &$kickedUsers, &$groupUsers, $ws_worker) {
   
   
    echo "New user connected--------------------------------\n";

    // 处理所有消息
    $connection->onMessage = function ($connection, $data) use (&$groups, &$kickedUsers, &$groupUsers, $ws_worker) {
   
   
        $data = json_decode($data, true);

        if (isset($data['action'])) {
   
   
            switch ($data['action']) {
   
   
                case 'joinGroup':
                    handleJoinGroup($connection, $data, $groups, $kickedUsers, $groupUsers, $ws_worker);
                    break;
                case 'sendMessage':
                case 'kickUser':
                    handleMessageAndKick($connection, $data, $groups, $kickedUsers, $groupUsers, $ws_worker);
                    break;
                case 'recallMessage':
                    handleRecallMessage($connection, $data, $groups, $kickedUsers, $groupUsers, $ws_worker);
                    break;
                case 'heartbeat':
                    // 更新最后心跳时间
                    $connection->lastHeartbeat = time();
                    // 发送响应
                    $connection->send(json_encode(['type' => 'heartbeat', 'content' => 'pong']));
                    break;
                default:
                    $connection->send(json_encode(['type' => 'error', '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值