美文网首页我爱编程
swoole 点对点发送消息推送

swoole 点对点发送消息推送

作者: 奔跑吧笨笨 | 来源:发表于2018-03-22 15:55 被阅读0次

    swoole+webSocket  消息推送,或则聊天室,实现。

    先上代码,(上菜。。。。)点对点,简单(客户发送,服务回复。)

    点对所有,广播

    见图所示:参数详解

    /** * 1.实例化  对象 * $host  127.0.0.1 (本机)  外网:0.0.0.0 (ipv4的所有可访问) * $port  9501 (1024以下 需要root权限) * $mode  运行模式    1.SWOOLE_PROCESS  多进程模式(默认)  2.SWOOLE_BASE  基本模式    (可选) * $sock_type 指定Socket的类型,支持TCP、UDP、TCP6、UDP6、UnixSocket Stream/Dgram 6种  (可选) */// 注:【on 】和jquery类似

    采用匿名函数  $ws ,$fd  两个形参  :$ws对象    $fd  客户端标识符(用户id)

    着重 注意:$fd,这是基于TCP的客户端的唯一标识。在swoole官方文档中,韩老大已经写的很清楚了,

    这个$fd,

    1.自增的

    2.有限(max:1600万)

    3.可复用(但同一个server中,不会重复)

    (番外鱼:有的人认为,有最大值,且可复用,这样会限制服务。并且崇洋媚外,殊不知Linux最大支持连接数是64K,几位65536,如果自己基于swoole写的服务,真的达到了同时在线人数1600w+,并且单服务器。那么,什么话都别说,膜拜)

    思考:服务怎么和实际业务完美的结合,绑定,映射实现。

    途径:DB,redis,memcache,apc,等等。

    1.当客户端发来请求,并携带uid,或用户名等(业务中的唯一标识)

    2.建立连接时,存入              绑定,产生映射关系。   $fd1 ==   uid10086         $fd2 ==   uid10010

    3.业务处理,点对点发送,客户端传来。想要发送给B,B的uid,同时uid_B发来  ,此时查找当前的uid_B的映射$fd,然后发送。

                        点对多,同样,从映射中获取,并遍历,$server->push($fd,“我是谁谁,我想告诉你们”);

    4.何时取消映射关系?何时取消可以保证复用的时候,关系没有错乱?

    当然是在关闭的时候取消当前的映射关系,以防止在复用的时候导致关系的错乱。

    以上仅为大概思路,具体操作当中,还要考虑到心跳检测,以防止客户端断电,等意外因素。

    心跳检测的思路:

    方法1.客户端在固定的时间间隔中发送请求,后台服务判断,某个$fd,在超出时间间隔范围外,仍没有给我汇报,则宣布死亡

    方法2.服务端主动打发送信息,客户端可返回信息,可不返回信息。

             A,客户端返回信息,此时后端接收到信息,知道该连接还活着。

             B,傲娇的客户端不返回信息,后端仍然孜孜不倦的发送,直到客户端已经关闭,此时服务端发送的消息会在tcp层,因为发送超时,而关闭。

    php的发展,在突破自身瓶颈之后,不在是web小王子,而是可以百变金刚。phper在不止步于业务层面上更进一步,相反,phper能实现更多的业务需求。

    我为人人,人人为我;美美与共,天下大同;

    相关文章

      网友评论

        本文标题:swoole 点对点发送消息推送

        本文链接:https://www.haomeiwen.com/subject/hzbaqftx.html