Workerman5.0如何实现一对一聊天

文章精选推荐

1 JetBrains Ai assistant 编程工具让你的工作效率翻倍

2 Extra Icons:JetBrains IDE的图标增强神器

3 IDEA插件推荐-SequenceDiagram,自动生成时序图

4 BashSupport Pro 这个ides插件主要是用来干嘛的 ?

5 IDEA必装的插件:Spring Boot Helper的使用与功能特点

6 Ai assistant ,又是一个写代码神器

7 Cursor 设备ID修改器,你的Cursor又可以继续试用了

文章正文

要实现一对一聊天功能,使用 Workerman 5.0 作为后端,前端可以使用 WebSocket 进行通信。以下是实现步骤和代码示例。

1. 安装 Workerman

首先,确保你已经安装了 Workerman。可以通过 Composer 安装:

bash 复制代码
composer require workerman/workerman

2. 后端代码

创建一个 PHP 文件(例如 chat_server.php),用于处理 WebSocket 连接和消息传递。

php 复制代码
<?php
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;
use Workerman\Connection\TcpConnection;

// 创建一个 WebSocket 服务器
$ws_worker = new Worker("websocket://0.0.0.0:2346");

// 保存用户连接的数组
$users = [];

// 当有客户端连接时
$ws_worker->onConnect = function(TcpConnection $connection) use (&$users) {
    echo "New connection\n";
};

// 当有客户端发送消息时
$ws_worker->onMessage = function(TcpConnection $connection, $data) use (&$users) {
    $message = json_decode($data, true);

    if (isset($message['type'])) {
        switch ($message['type']) {
            case 'login':
                // 用户登录,保存连接
                $users[$message['user_id']] = $connection;
                $connection->user_id = $message['user_id'];
                echo "User {$message['user_id']} logged in\n";
                break;

            case 'chat':
                // 一对一聊天
                if (isset($users[$message['to_user_id']])) {
                    $users[$message['to_user_id']]->send(json_encode([
                        'type' => 'chat',
                        'from_user_id' => $connection->user_id,
                        'message' => $message['message']
                    ));
                }
                break;
        }
    }
};

// 当客户端断开连接时
$ws_worker->onClose = function(TcpConnection $connection) use (&$users) {
    if (isset($connection->user_id)) {
        unset($users[$connection->user_id]);
        echo "User {$connection->user_id} disconnected\n";
    }
};

// 运行 worker
Worker::runAll();

3. 前端代码

在前端,使用 WebSocket 连接到服务器,并实现登录和发送消息的功能。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket Chat</title>
</head>
<body>
    <div>
        <input type="text" id="user_id" placeholder="Your User ID">
        <button onclick="login()">Login</button>
    </div>
    <div>
        <input type="text" id="to_user_id" placeholder="To User ID">
        <input type="text" id="message" placeholder="Message">
        <button onclick="sendMessage()">Send</button>
    </div>
    <div id="chat"></div>

    <script>
        let ws;
        let user_id;

        function login() {
            user_id = document.getElementById('user_id').value;
            ws = new WebSocket('ws://127.0.0.1:2346');

            ws.onopen = function() {
                ws.send(JSON.stringify({
                    type: 'login',
                    user_id: user_id
                }));
            };

            ws.onmessage = function(event) {
                const message = JSON.parse(event.data);
                if (message.type === 'chat') {
                    document.getElementById('chat').innerHTML += `<p>From ${message.from_user_id}: ${message.message}</p>`;
                }
            };
        }

        function sendMessage() {
            const to_user_id = document.getElementById('to_user_id').value;
            const message = document.getElementById('message').value;
            ws.send(JSON.stringify({
                type: 'chat',
                to_user_id: to_user_id,
                message: message
            }));
        }
    </script>
</body>
</html>

4. 运行服务器

在终端中运行 PHP 文件启动 WebSocket 服务器:

bash 复制代码
php chat_server.php start

5. 测试

  1. 打开两个浏览器窗口,分别输入不同的用户 ID 并登录。
  2. 在一个窗口中输入目标用户 ID 和消息,点击发送。
  3. 另一个窗口应该会收到消息并显示在页面上。

总结

通过以上步骤,你可以实现一个简单的一对一聊天系统。Workerman 作为后端处理 WebSocket 连接和消息传递,前端通过 WebSocket 与服务器通信,实现实时聊天功能。

相关推荐
xiaoshuaishuai84 小时前
Git二分法定位Bug
开发语言·python
so2F32hj24 小时前
一款Go语言Gin框架DDD脚手架,适合快速搭建项目
开发语言·golang·gin
LJianK15 小时前
Java中的类、普通类,抽象类,接口的区别
java·开发语言
Dev7z5 小时前
基于MATLAB的5G物理层文本传输系统仿真与性能分析
开发语言·5g·matlab
小智社群5 小时前
贝壳获取小区的名称
开发语言·前端·javascript
lsx2024065 小时前
Python3 OS模块详解
开发语言
微涼5305 小时前
【Python】在使用联网工具时需要的问题
服务器·python·php
LiLiYuan.5 小时前
【Java线程 vs 虚拟机线程】
java·开发语言
FlDmr4i285 小时前
.NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members
开发语言·c#·.net
原来是猿5 小时前
Linux进程信号详解(三):信号保存
开发语言·c++·算法