TP5.1----使用workerman

最近学习workerman,做一个简单的聊天页面,开始在网上各种百度,后来越来越感觉官方文档才是我们的好朋友,传送门:

                    http://doc2.workerman.net/

1)按照官网上的例子我们会感觉workerman很简单,但是回头我们毕竟要将它和框架用在一起,tp文档给了我们介绍了怎么使用,然而愚笨的我看完之后更是一脸懵逼,回头再看文档:

getwayworker文档截图

                1》我们会发现官方文档并没有将gatewayworker和tp融合在一起,而是独立的运行,那么我们为什么不这样做呐??

2)我们直接下载GatewayWorker框架,我的是windows系统,传送门:

               https://www.workerman.net/download

下载地址截图

   3)接下来的是,把他放在哪,怎么用??其实我们可以直接把压缩包解压放在tp框架的任何位置,我就直接解压放在项目目录下:

框架截图

4)GatewayWorker给了我们很好的封装,我们只需要关注一个文件:

GatewayWorker\GatewayWorker\Applications\YourApp\Events.php

5)由于我是简单的测试,所以我只是改动了两个方法

                    1》onConnect当用户连接时初始化,绑定uid

                    2》onMessage处理逻辑需求

6)接下来我从代码流程开始一步一步操作,主要涉及两个文件

                        1》Events.php(GatewayWorker业务控制类)

                         2》show.html(前端交互页面)

7)下面运行流程正式开始:

            1》首先我们先设置连接类型和监听端口,打开:

                    GatewayWorker\GatewayWorker\Applications\YourApp\start_gateway.php

                    在这个文件中我们只需要修改一行代码:

修改位置截图

                                    ①协议:我测试使用的是Websocket

                                    ②ip地址:这个建议使用0.0.0.0,我本地测试所以使用127.0.0.1

                                    ③端口:这个很重要

                                    ④文档中这三个写的很详细,再次建议看文档

        2》直接双击这个解压文件夹下面的start_for_win.bat,如果你看到这个那么恭喜你,GatewayWorker可以正常使用了:

GatewayWorker运行截图

        3》环境已经完成了,那么切入我们的主题业务逻辑,用户访问的是页面,那么我们就从页面开始:假设我们是在模拟两个人聊天,他们两个人的id为fromid和toid,首先我们在js中实例化一个对象

                    var ws = new WebSocket('ws://127.0.0.1:8282');   

                            ①因为我刚才启动的时候使用的是 Websocket协议,所以我这里实例化Websocket

                            ②ip和端口号一定要和上文的配置相同

        4》当我们实例化成功之后这次连接会触发Events.php中的onConnect方法,我们来看一下这个方法都能做什么:

onConnect方法截图

                            ①这个方法中有一个参数$client_id,这是系统给我们的一个id,但是每次刷新它都会变

                            ②这时我们向客户端发送一个消息,设置数组中的类型为init,意义为初始化

          5》当服务器发送类型为init的数据时,这时刚刚操作的客户端就会触发onmessage方法,因为一会会有很多的数组类型,所以我用switch:

客户端的onmessage方法

                                   ①在接收数据的时候我们需要对数据做类型转换

                                    ②我在客户端也定义了init的数组类型在这个分支中我做两件事情,绑定我的fromid和查看和我聊天的那个人在不在

        6》当客户端发送这两个消息的时候,同样会触发服务器的onMessage方法:

onmessage事件截图

                                    ①我们可以看到这个方法有两个参数

                                                $client_id系统给你分配的id

                                                $message客户端传来的参数

                                    ②在方法中我们同样需要将客户端传来的参数进行类型转换

                                    ③在init中我们绑定uid,将我们的身份确定,没有向客户端发消息

                                     ④在status中我们判断聊天对象是否在线,并将结果返回刚刚连接的客户端

            7》这时再次触发客户端的onmessage方法,我们继续用switch类型判断逻辑:

客户端status分支

                                        ①因为你现在有可能和多人聊天,所以需要对你的聊天对象进行判断

                                         ②应对返回值判断用户是否在线

            8》至此客户端和聊天对象的初始化就算完成了,你确定了自己的固定id,也知道了对面是否在线

            9》现在在show.html中我们需要创建一个input框用来输入信息,和一个button按钮提交信息,这个html很简单,现在我们关注button点击时触发的点击事件:

                        var info = $('#say').val();

                        var data = '{"type":"say","fromid":"'+fromid+'","toid":"'+toid+'","content":"'+info+'"}';

                        ws.send(data);

                        ①我们需要获取输入框中的消息我们可以对输入框中的信息做一下自己想要的过滤

                         ②我们同在预设发送消息的type类型,这样在服务器中就可以做对应的逻辑判断

            10》当我们发送完消息之后,同样会触发服务器中的onmessage方法,由于我们发送数据的type是say,所以我们应该在say分支下处理逻辑

                        case"say":

                          $res['type'] = "say";

                          $res['fromid'] = $data['fromid'];

                          $res['toid'] = $data['toid'];

                          $res['content'] = $data['content'];

                          Gateway::sendToUid($data['toid'],json_encode($res));

                          break;

                           ①我们在处理对话分支的时候一定要分清fromid和toid

                            ②这次我们将消息应该发送到聊天对象那,而不是返回到自己,所以sendToUid的对象应该是toid,刚开始做这个的时候很乱,需要我们冷静下来慢慢捋顺。

            11》服务器发送完消息之后,这是再次出发客户端的onmessage方法,这时我们需要在type=say的分支接收逻辑:

                            if(message.fromid == toid) {

                            $('#message-container').append('<div class="center-left"><img src="{:env('FACE_PATH')}'+topic+'" class="center-pic-left"><span class="center-mess-left">'+replace_em(message.content)+'</span></div>').scrollTop(3000);

                            }

                            break;

                             ①这时我们回到客户端,我们的身份不再是发件人,而是应该站在收件人的角度考虑

                             ②这时你是发件人,发过来的消息的发件人应该是你现在正在聊天的收件人

                              ③如果收到的消息的发件人是你正在聊天的对象,那么就将消息追加到聊天列表中

            12》到此一个从开启服务器到客户端绑定uid,再到发件人发送消息最后到收件人接收消息的小逻辑就完成了,我这个简单的例子没有加上tp框架的数据交互,只是涉及一个getawayWorker服务器和两个客户端,一定要理解好fromid和toid的相互关系:

涉及关系图

8)我自己做了一个简单的demo,可以去看看我做的小聊天页面

                                     106.12.103.71

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • _________________________________________________________...
    fastwe阅读 610评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSo...
    敢梦敢当阅读 8,882评论 0 50
  • (一袭青衣) 霓虹闪烁唐汉风, 一袭红白两雍容。 华丽染就芳华现, 绝世风雅流年里。 一身芳菲尽妩媚, 二䄂明月照...
    甘朝武阅读 466评论 0 0
  • 松是群里一起学英语的小伙伴,她女儿刚参加中考,我估计我们年纪差不多。松说中文也有浓浓的口音,和王宝强有点老...
    蜗居生活阅读 79评论 0 0