TP5+web-msg-sender实现即时推送(即时站内信)

1.下载web-msg-sender 下载链接。并解压缩到任意目录(你可以放到tp5目录里,也可以放到www目录)
2.启动:linux系统cd到到web-msg-sender目录里运行php start.php start -d
windows系统进入到框架目录里双击start_for_win.bat文件启动。
windows会看见如下输出
在这里插入图片描述
3. 服务器推送
/application/lib/event/PushEvent.php

namespace app\lib\event;
 
/**
 * 推送事件
 * 典型调用方式:
 * $push = new PushEvent();
 * $push->setUser($user_id)->setContent($string)->push();
 *
 * Class PushEvent
 * @package app\lib\event
 */
class PushEvent
{
    /**
     * @var string 目标用户id
     */
    protected $to_user = '';
 
    /**
     * @var string 推送服务地址
     */
    protected $push_api_url = 'http://127.0.0.1:2121/';//如果在服务器上127.0.0.1换成服务器上的域名:2121
 
    /**
     * @var string 推送内容
     */
    protected $content = '';
 
    /**
     * 设置推送用户,若参数留空则推送到所有在线用户
     *
     * @param string $user
     * @return $this
     */
    public function setUser($user = '')
    {
        $this->to_user = $user ? : '';
        return $this;
    }
 
    /**
     * 设置推送内容
     *
     * @param string $content
     * @return $this
     */
    public function setContent($content = '')
    {
        $this->content = $content;
        return $this;
    }
 
    /**
     * 推送
     */
    public function push()
    {
        $data = [
            'type' => 'publish',
            'content' => $this->content,
            'to' => $this->to_user,
        ];
        $ch = curl_init ();
        curl_setopt($ch, CURLOPT_URL, $this->push_api_url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
        $res = curl_exec($ch);
        curl_close($ch);
        dump($res);
 
    }
}

4.控制器调用
/application/demo/controller/PushDemo.php

namespace app\demo\controller;
 
 
use app\lib\event\PushEvent;
 
/**
 * 推送demo
 *
 * Class PushDemo
 * @package app\demo\controller
 */
class PushDemo
{
    /**
     * 推送一个字符串
     */
    public function pushAString()
    {
        $uid= input('uid') ? : $string;//接收客户端发过来的uid进行业务操作
         $string = 'Man Always Remember Love Because Of Romance Only';//推送的消息,实际开发中换成根据uid查的业务值
        $push = new PushEvent();
        $push->setUser()->setContent($string)->push();
 
 
    }
 
    /**
     * 推送目标页
     *
     * @return \think\response\View
     */
    public function targetPage()
    {
        return view();
    }
}

5.客户端(浏览器)收
/application/demo/view/PushDemo/targetPage.html

 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<strong id="count"></strong>
 
<h1 id="target"></h1>
</body>
</html>
<script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
    jQuery(function ($) {
 
        // 连接服务端
        var socket = io('http://127.0.0.1:2120'); //这里当然填写真实的地址了
        // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数
        uid = 123;
        // socket连接后以uid登录
        socket.on('connect', function () {
            socket.emit('login', uid);
        });
        // 后端推送来消息时
        socket.on('new_msg', function (msg) {
            console.log("收到消息:" + msg);
            $('#target').append(msg).append('<br>');
        });
        // 后端推送来在线数据时
        socket.on('update_online_count', function (online_stat) {
            console.log(online_stat);
            $('#count').html(online_stat);
        });
    })
 
</script>

效果如下
在这里插入图片描述在这里插入图片描述如果http://www.memebackstage.com/index/push/pushAString没请求成功
http://www.memebackstage.com/index/push/targetpage 页面就会一直请求127.0.0.1::2120,直到推送成功
刷新一次http://www.memebackstage.com/index/push/pushAString,
http://www.memebackstage.com/index/push/targetpage 页面就会再被推送一次
在这里插入图片描述
注意
在服务器上的话别忘了在安全组开端口(入方向);并重启服务器
如果服务器是windows,要把PHP路径加到环境变量,并重启服务器。
因为我是Windows服务器,Linux没有测,以后会补上
至此完毕 。

转载自 :https://my.oschina.net/inuxor/blog/737863#comment-list
https://blog.youkuaiyun.com/h330531987/article/details/78081392
参考资料(有用必读)
http://www.ptbird.cn/web-msg-sender-send-content.html
https://www.workerman.net/web-sender

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值