当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布: 来源: PHP粉丝网  添加日期:2026-03-25 18:47:31 浏览: 评论:0 

这篇文章主要介绍了实现一对一聊天功能的相关代码,本文将使用 Workerman 5.0 作为后端,使用WebSocket在前端进行通信,有需要的小伙伴可以参考一下。

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

1. 安装 Workerman

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

composer require workerman/workerman

2. 后端代码

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

  1. require_once __DIR__ . '/vendor/autoload.php'
  2.   
  3. use Workerman\Worker; 
  4. use Workerman\Connection\TcpConnection; 
  5.   
  6. // 创建一个 WebSocket 服务器 
  7. $ws_worker = new Worker("websocket://0.0.0.0:2346"); 
  8.   
  9. // 保存用户连接的数组 
  10. $users = []; 
  11.   
  12. // 当有客户端连接时 
  13. $ws_worker->onConnect = function(TcpConnection $connectionuse (&$users) { 
  14.     echo "New connection\n"
  15. }; 
  16.   
  17. // 当有客户端发送消息时 
  18. $ws_worker->onMessage = function(TcpConnection $connection$datause (&$users) { 
  19.     $message = json_decode($data, true); 
  20.   
  21.     if (isset($message['type'])) { 
  22.         switch ($message['type']) { 
  23.             case 'login'
  24.                 // 用户登录,保存连接 
  25.                 $users[$message['user_id']] = $connection
  26.                 $connection->user_id = $message['user_id']; 
  27.                 echo "User {$message['user_id']} logged in\n"
  28.                 break
  29.   
  30.             case 'chat'
  31.                 // 一对一聊天 
  32.                 if (isset($users[$message['to_user_id']])) { 
  33.                     $users[$message['to_user_id']]->send(json_encode([ 
  34.                         'type' => 'chat'
  35.                         'from_user_id' => $connection->user_id, 
  36.                         'message' => $message['message'
  37.                     )); 
  38.                 } 
  39.                 break
  40.         } 
  41.     } 
  42. }; 
  43.   
  44. // 当客户端断开连接时 
  45. $ws_worker->onClose = function(TcpConnection $connectionuse (&$users) { 
  46.     if (isset($connection->user_id)) { 
  47.         unset($users[$connection->user_id]); 
  48.         echo "User {$connection->user_id} disconnected\n"
  49.     } 
  50. }; 
  51.   
  52. // 运行 worker 
  53. 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.   
  19.     <script> 
  20.         let ws; 
  21.         let user_id; 
  22.   
  23.         function login() { 
  24.             user_id = document.getElementById('user_id').value; 
  25.             ws = new WebSocket('ws://127.0.0.1:2346'); 
  26.   
  27.             ws.onopen = function() { 
  28.                 ws.send(JSON.stringify({ 
  29.                     type: 'login', 
  30.                     user_id: user_id 
  31.                 })); 
  32.             }; 
  33.   
  34.             ws.onmessage = function(event) { 
  35.                 const message = JSON.parse(event.data); 
  36.                 if (message.type === 'chat') { 
  37.                     document.getElementById('chat').innerHTML += `<p>From ${message.from_user_id}: ${message.message}</p>`; 
  38.                 } 
  39.             }; 
  40.         } 
  41.   
  42.         function sendMessage() { 
  43.             const to_user_id = document.getElementById('to_user_id').value; 
  44.             const message = document.getElementById('message').value; 
  45.             ws.send(JSON.stringify({ 
  46.                 type: 'chat', 
  47.                 to_user_id: to_user_id, 
  48.                 message: message 
  49.             })); 
  50.         } 
  51.     </script> 
  52. </body> 
  53. </html> 

4. 运行服务器

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

php chat_server.php start

5. 测试

打开两个浏览器窗口,分别输入不同的用户 ID 并登录。

在一个窗口中输入目标用户 ID 和消息,点击发送。

另一个窗口应该会收到消息并显示在页面上。

总结:

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

Tags: PHP调用Workerman5 0 Workerman5 0

分享到: