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.csdn.net/h330531987/article/details/78081392
参考资料(有用必读)
http://www.ptbird.cn/web-msg-sender-send-content.html
https://www.workerman.net/web-sender

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Ionic Angular 项目中实现消息推送功能并打包为 Android APK,你可以按照以下步骤进行操作: 1. 配置 Firebase Cloud Messaging (FCM):首先,你需要在 Firebase 控制台中创建一个项目,并启用 FCM。然后,在 Ionic 项目中安装 Firebase 相关的插件和依赖,如 `@angular/fire` 和 `firebase`. 接下来,按照 Firebase 文档的指引,将你的应用连接到 Firebase 项目。 2. 安装 Cordova 插件:使用 Cordova 插件来与 Android 设备的原生推送服务进行交互。在终端或命令行中进入 Ionic 项目的根目录,然后执行以下命令安装 Cordova 插件: ``` cordova plugin add cordova-plugin-fcm-with-dependecy-updated ``` 3. 配置 Android 平台:确保你已经添加了 Android 平台到 Ionic 项目中(如果没有,可以通过运行 `ionic cordova platform add android` 添加)。然后,根据 FCM 插件的文档,在 `config.xml` 文件中添加以下代码: ```xml <platform name="android"> <resource-file src="google-services.json" target="app/google-services.json" /> <preference name="FCM_ANDROID_SENDER_ID" value="your_sender_id" /> </platform> ``` 将 `your_sender_id` 替换为你在 Firebase 控制台中获得的 FCM 发送者 ID。 4. 处理推送通知:在你的 Ionic Angular 项目中,你可以使用 `@angular/fire` 提供的 `AngularFireMessaging` 服务来处理推送通知。在你的应用的相应页面或服务中,注入 `AngularFireMessaging`,并编写代码来处理收到的推送通知。 ```typescript import { AngularFireMessaging } from '@angular/fire/messaging'; // ... constructor(private afMessaging: AngularFireMessaging) {} // 监听推送通知 listenForPushNotifications() { this.afMessaging.messages.subscribe((message) => { console.log('Received push notification', message); // 在这里处理推送通知的逻辑 }); } ``` 5. 构建 APK:完成上述配置后,你可以使用以下命令构建 Android APK: ``` ionic cordova build android --prod ``` 这将生成一个已经配置了消息推送功能的 Android APK 文件。 请注意,以上步骤仅提供了一个大致的指导,具体的实现细节和代码可能会因你的项目结构和需求而有所不同。建议你参考相关插件和工具的文档以获取更详细的信息,并根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值