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 连接和消息传递。
- 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 连接到服务器,并实现登录和发送消息的功能。
- <!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 服务器:
php chat_server.php start
5. 测试
打开两个浏览器窗口,分别输入不同的用户 ID 并登录。
在一个窗口中输入目标用户 ID 和消息,点击发送。
另一个窗口应该会收到消息并显示在页面上。
总结:
通过以上步骤,你可以实现一个简单的一对一聊天系统。Workerman 作为后端处理 WebSocket 连接和消息传递,前端通过 WebSocket 与服务器通信,实现实时聊天功能。
Tags: PHP调用Workerman5 0 Workerman5 0
- 上一篇:使用PHP实现RESTful API的常见问题与解决方案
- 下一篇:最后一页
相关文章
- ·新浪微博PHP版SDK的导致20007错误(2013-12-03)
- ·新浪SAEf域名301重定向设置(2014-02-10)
- ·301重定向代码(php apache) (2014-05-13)
- ·iis和apache及PHP页面设置301重定向跳转方法(2014-07-11)
- ·php获取用户浏览器版本代码(2014-09-09)
- ·php5.3怎么连接sqlserver2000(2014-09-10)
- ·phpmyadmin连接mysql出现2002服务器没有响应(2014-09-10)
- ·phpmyadmin出现2003服务器无响应解决方法(2014-09-11)
- ·解决Fatal error: Maximum function nesting level of ’100′ reached报错(2014-10-22)
- ·解决php导致nginx报502 bad gateway错误问题(2015-04-04)
- ·PHP连接MSSQL2008/2005数据库(SQLSRV)配置(2015-04-15)
- ·php 502 bad gateway的解决方案(2018-10-22)
- ·php7跑laravel5.0报错,异常Carbon::createFromFormat()(2018-10-23)
- ·PHPExcel在linux环境下导出报500错误的解决方法(2018-10-26)
- ·PHP7.0新增功能详解(实例)(2020-02-05)
- ·php实现信用卡校验位算法THE LUHN MOD-10示例(2020-12-08)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
