logo资料库

ThinkPHP5+workerman+layIM打造聊天系统.pdf

第1页 / 共219页
第2页 / 共219页
第3页 / 共219页
第4页 / 共219页
第5页 / 共219页
第6页 / 共219页
第7页 / 共219页
第8页 / 共219页
资料共219页,剩余部分请下载后查看
laychat系统说明
workerman与Thinkphp5整合原理
laychat系统的基础搭建
通用后台的搭建
workerman的集成
layIM的集成
管理员后台功能的实现
后台登录退出的实现
群组管理的设计与实现
群组基础配置
群组管理
用户管理
聊天设置
用户的举报
聊天系统的设计与实现
注册功能的实现
登录功能的实现(1)
登录功能的实现(2)
登录功能的实现(3)
登录功能的实现(4)
修改个人资料的实现
修改个性签名的实现
切换在线状态的实现
添加好友的实现
消息盒子
用意/拒绝好友(1)
同意/拒绝好友(2)
好友聊天的实现
创建群组的实现
按条件查找群组
申请加入群组
管理我的群组
群组聊天
右键退出群组
发送语音
发送图片
发送文件
用户空间功能
查看聊天记录
进入好友空间
将好友加入黑名单
移动好友分组
删除好友
举报好友
数据字典
全国区域数据
系统整体结构说明
Events.php全部代码
main.js全部代码
laychat系统源码
目 录 laychat系统说明 workerman与Thinkphp5整合原理 laychat系统的基础搭建 通用后台的搭建 workerman的集成 layIM的集成 管理员后台功能的实现 后台登录退出的实现 群组管理的设计与实现 群组基础配置 群组管理 用户管理 聊天设置 用户的举报 聊天系统的设计与实现 注册功能的实现 登录功能的实现(1) 登录功能的实现(2) 登录功能的实现(3) 登录功能的实现(4) 修改个人资料的实现 修改个性签名的实现 切换在线状态的实现 添加好友的实现 消息盒子 用意/拒绝好友(1) 同意/拒绝好友(2) 好友聊天的实现 创建群组的实现 按条件查找群组 申请加入群组 管理我的群组 群组聊天 右键退出群组 发送语音 发送图片 发送文件 用户空间功能 查看聊天记录 本文档使用 看云 构建 - 2 -
进入好友空间 将好友加入黑名单 移动好友分组 删除好友 举报好友 数据字典 全国区域数据 系统整体结构说明 Events.php全部代码 main.js全部代码 laychat系统源码 本文档使用 看云 构建 - 3 -
laychat系统说明 laychat系统说明 ThinkPHP5+workerman+layIM打造聊天系统---laychat ThinkPHP5 是ThinkPHP 3.X系列之后的重量级产品,以出色的架构设计,强劲的性能闻名。很适合我们快 速的开发成熟的商用系统。到目前为止,github上也出现了很多成熟的thinkphp5快速开发的通用后台产 品。在这里给自己的一个项目做个广告:snake通用后台,算的上最早的一批tp5通用后台了,功能很简 单,便于新手快速的理解和使用tp5。到写作此文章开始,已经有135个star了。 Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通 讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的 开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步 Redis、异步Http、异步消息队列等众多高性能组件。它的作者是来自鹅厂的大神。本系统 laychat 采用的 是 Wokerman的 GatewayWorker3.X系列框架。文档可参考:GetwayWorker手册 layIM是原阿里的大神 贤心倾力打造的一款Web即时通讯前端解决方案。界面优美,功能强悍,仿真度 高。官网:layim官网,手册:layim手册 聊天部分功能清单 聊天用户的注册 聊天用户的登录 修改个人资料 修改个性签名 切换在线状态 按条件搜索添加好友 系统消息盒子 添加好友申请与同意/拒绝好友 好友聊天 创建群组 按条件查找群 申请加入群组 管理我的群组 群组聊天 右键退出我的群组 聊天发送语音 聊天发送图片 聊天发送文件 空间的说说发表,评论功能 查看个人和群聊记录 本文档使用 看云 构建 - 4 -
laychat系统说明 好友右键功能 1. 进入好友空间 2. 将好友加入黑名单 3. 移动好友分组 4. 删除好友 5. 举报好友 大致了解一下外观 了解外观 本系统用到的全部源码 我会在本套教程中,全部展示这些源码,展示源码的方式如: // +---------------------------------------------------------------------- namespace app\admin\controller; use think\Controller; class Chat extends Controller { public function index() { if(request()->isPost()){ $data = input('post.'); $data['file_ext'] = trim($data['file_ext']); $data['img_ext'] = trim($data['img_ext']); writeCtConfig($data); return json(['code' => 1, 'data' => '', 'msg' => '配置成功']); } $config = readCtConfig(); empty($config) && $config = ['file_size' => 2, 'file_ext' => 'zip|rar', 'img_size' => 2, 'img_ext ' => 'png|jpg|gif']; $this->assign([ 'config' => $config, 'up_size' => ini_get('upload_max_filesize') ]); return $this->fetch(); } } 你可以跟着教程,一步一步搭建属于自己的 webIM系统。 本文档使用 看云 构建 - 5 -
laychat系统说明 此外,你也可以打开 《laychat系统源码》 这一章节,进行下载。 本地环境的注意事项 本次系统演示,采用的 phpstudy 这个集成环境,php版本为 5.6.27。服务器 以apache 为例,请保持与我一 致,或者自己修改其中不兼容的部分。 其他建议 1. 本套系统牵扯到的 websocket相关的知识,以及tcp协议的相关知识,不懂的可以百度做一些功课。也可 以通过我的博客:我的博客,了解一些相关的知识。 2. 本系统是基于windows平台的学习版本,当然你只需要下载linux版本的workerman即可轻松的实现linux平 台下的应用,为了演示和学习的方便,本系统基于windows平台下讲解。 3. 数据库不了解功能的 可以参考 《数据字典》 这一章节。 4. 由于讲解这个教程的时候,我的代码已经完成了,没办法一步一步的完全拆开介绍。因此,我会先全部放 出完成的js代码,然后顺着js的接口,一步一步的对php代码和workerman代码进行讲解。这些js代码,我 会首先放出,方便你在跟着教程的同时,有代码依据。 5. 有些workerman和layIM中的方法,可能没有讲到,如有不理解的,可以自行查找手册。手册写的都很明 确。 郑重声明 本系统用到的 layIM 为非开源程序。请务必到官网进行授权获得资源。本教程源码部分,不会放出 layim.js 这个源码。 本文档使用 看云 构建 - 6 -
workerman与Thinkphp5整合原理 workerman与Thinkphp5整合原理 看到一些人,可能不太明白workerman与thinkphp5是怎么工作的,这里,我引用workerman官方的文章来解 释一下,希望给你们一些参考。 与ThinkPHP等框架结合 使用GatewayWorker时开发者最关心的是如何与现有mvc框架(ThinkPHP Yii laravel等)整合,以下是官方推荐 的整合方式。见示意图: 总体原则: 现有mvc框架项目与GatewayWorker独立部署互不干扰 所有的业务逻辑都由网站页面post/get到mvc框架中完成 GatewayWorker不接受客户端发来的数据,即GatewayWorker不处理任何业务逻辑,GatewayWorker仅仅当 做一个单向的推送通道 仅当mvc框架需要向浏览器主动推送数据时才在mvc框架中调用Gateway的API(GatewayClient)完成推送 具体实现步骤 1、网站页面建立与GatewayWorker的websocket连接 2、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面 3、网站页面收到client_id后触发一个ajax请求(假设是bind.php)将client_id发到mvc后端 4、mvc后端bind.php收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)将client_id与 当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用 本文档使用 看云 构建 - 7 -
workerman与Thinkphp5整合原理 Gateway::joinGroup($client_id, $group_id)将client_id加入到对应分组 5、页面发起的所有请求都直接post/get到mvc框架统一处理,包括发送消息 6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口 Gateway::sendToUid Gateway::sendToGroup 等发送即可 示例代码 GatewayWorker中Events.php代码(只有个onConnect回调设置) 'init', 'client_id' => $client_id ))); } // GatewayWorker建议不做任何业务逻辑,onMessage留空即可 public static function onMessage($client_id, $message) { } } 网站页面js片段 /** * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口, * 其中端口为Gateway端口,即start_gateway.php指定的端口。 * start_gateway.php 中需要指定websocket协议,像这样 * $gateway = new Gateway(websocket://0.0.0.0:7272); */ ws = new WebSocket("ws://your_domain.com:7272"); // 服务端主动推送消息时会触发这里的onmessage ws.onmessage = function(e){ // json数据转换成js对象 var data = eval("("+e.data+")"); var type = data.type || ''; switch(type){ // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定 case 'init': // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定 $.post('./bind.php', {client_id: data.client_id}, function(data){}, 'json') ; break; // 当mvc框架调用GatewayClient发消息时直接alert出来 default : alert(e.data); } }; 本文档使用 看云 构建 - 8 -
分享到:
收藏