• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    PHP调用Workerman5.0实现一对一聊天

    发布者: 雪落无声 | 发布时间: 2025-6-14 13:14| 查看数: 86| 评论数: 0|帖子模式

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

    1. 安装 Workerman

    首先,确保你已经安装了 Workerman。可以通过 Composer 安装:
    1. composer require workerman/workerman
    复制代码
    2. 后端代码

    创建一个 PHP 文件(例如 chat_server.php),用于处理 WebSocket 连接和消息传递。
    1. <?php
    2. require_once __DIR__ . '/vendor/autoload.php';

    3. use Workerman\Worker;
    4. use Workerman\Connection\TcpConnection;

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

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

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

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

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

    24.             case 'chat':
    25.                 // 一对一聊天
    26.                 if (isset($users[$message['to_user_id']])) {
    27.                     $users[$message['to_user_id']]->send(json_encode([
    28.                         'type' => 'chat',
    29.                         'from_user_id' => $connection->user_id,
    30.                         'message' => $message['message']
    31.                     ));
    32.                 }
    33.                 break;
    34.         }
    35.     }
    36. };

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

    44. // 运行 worker
    45. Worker::runAll();
    复制代码
    3. 前端代码

    在前端,使用 WebSocket 连接到服务器,并实现登录和发送消息的功能。
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>WebSocket Chat</title>
    6. </head>
    7. <body>
    8.     <div>
    9.         <input type="text" id="user_id" placeholder="Your User ID">
    10.         <button onclick="login()">Login</button>
    11.     </div>
    12.     <div>
    13.         <input type="text" id="to_user_id" placeholder="To User ID">
    14.         <input type="text" id="message" placeholder="Message">
    15.         <button onclick="sendMessage()">Send</button>
    16.     </div>
    17.     <div id="chat"></div>

    18.     <script>
    19.         let ws;
    20.         let user_id;

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

    24.             ws.onopen = function() {
    25.                 ws.send(JSON.stringify({
    26.                     type: 'login',
    27.                     user_id: user_id
    28.                 }));
    29.             };

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

    37.         function sendMessage() {
    38.             const to_user_id = document.getElementById('to_user_id').value;
    39.             const message = document.getElementById('message').value;
    40.             ws.send(JSON.stringify({
    41.                 type: 'chat',
    42.                 to_user_id: to_user_id,
    43.                 message: message
    44.             }));
    45.         }
    46.     </script>
    47. </body>
    48. </html>
    复制代码
    4. 运行服务器

    在终端中运行 PHP 文件启动 WebSocket 服务器:
    1. php chat_server.php start
    复制代码
    5. 测试

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

    总结

    通过以上步骤,你可以实现一个简单的一对一聊天系统。Workerman 作为后端处理 WebSocket 连接和消息传递,前端通过 WebSocket 与服务器通信,实现实时聊天功能。
    到此这篇关于PHP调用Workerman5.0实现一对一聊天的文章就介绍到这了,更多相关PHP Workerman聊天内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/program/3381854t1.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表