基于swoole开发的聊天室(一)

看了swoole手册,了解了swoole以后,开始做一个基于swoole开发的一个聊天室,前不久刚看了workman做了一个聊天室以后,发现了相对于swoole,workerman还是太年轻,swoole他是一个多线程多进程的PHP模块,成就了他异步非堵塞得强大功能,能更有效的的处理高并发。另外还拥有任务投递,进程管理,以及协程的功能,让他能一定程度上解决PHP单线程的弊端。在之前也讲解过,如何通过创建多个进程来解决PHP低效率的案例。下面就开始讲解一下swoole的聊天室开发。

本次开发中,主要用到,继承于httpserver的websocket,以及mysql的协程,任务投递,也用到的Redis,其中在redis中,将redis单独封装成了一个类,引用了单例模式,减少了对redis的频繁连接。以及用到__call()方法,实现了,代码的简洁化。

那首先先介绍一下,redis类的封装。


基于swoole开发的聊天室(一)_第1张图片
基于swoole开发的聊天室(一)_第2张图片

简短的几十行代码,就将redis几乎所有的方法都引用了,首先将该类设为单例模式,用:三私一公的口诀。

这里主要讲解的是__call()方法,那如何使用该类呢?很简单。举个例子:$redis=MyRedis::getinstance();     $redis->get('young');

这样就能直接获取到key为young的数据了,那如何做到的呢?

首先在由于getinstance是个静态方法,因此直接调用,在进入到getinstance()方法中,首先会判断MyRedis类是否被实例化过,若是没有,则实例化,接着进入构造函数,去连接redis,若已经实例化了,则直接返回实例化后的redis。然后调用get()方法,由于类中没有该方法,因此进入__call()方法,其中$name 为方法的名称,$arguments为get方法中传入参数。接着判断参数得数量,进入switch。这样就完成了,redis单例模式得案例。

下一节,开始讲解swoole的聊天室的开发,有一起探讨的可加:601902897来一起学习学习

你可能感兴趣的:(基于swoole开发的聊天室(一))