设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间04 现在时间04 缓存数据 你抽烟的姿势越来越熟练,爱人也越来越随便。从当时的三杯倒到现在喝不醉,这是堕落不是成长,可是没人掐掉你手中的烟,没人给你一个家,没人替你挡掉手中的酒。说白了,除了孤独和酒你什么都没有。

你抽烟的姿势越来越熟练,爱人也越来越随便。从当时的三杯倒到现在喝不醉,这是堕落不是成长,可是没人掐掉你手中的烟,没人给你一个家,没人替你挡掉手中的酒。说白了,除了孤独和酒你什么都没有。 -- 大哥

查看: 201|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:15
  • 打卡月天数:0
  • 打卡总奖励:234
  • 最近打卡:2023-08-27 08:27:35
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
55
主题
41
精华
0
金钱
385
积分
104
注册时间
2023-8-13
最后登录
2025-5-31

发表于 2025-5-31 06:32:25 | 显示全部楼层 |阅读模式
要实现一对一聊天功能,使用 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聊天内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

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