13397158231   jevian_ma@worldflying.cn

第三方消息推送服务之云巴

2017-08-23 10:00:00

之前有几篇教大家搭建自己的私有mqtt服务器。但是,考虑到推送需要使用长连接,很消耗服务器的带宽资源。自己的服务器如果配置不够高,就很容易掉线。因此,类似这样的大流量服务器,我们公司建议您使用专业的第三方的服务。云巴就是这样对的一个第三方服务平台。

云巴的互联网通信服务基于mqtt协议实现,申请玩云巴账号后。记下AppKey与SecretKey这两个参数。

开始是需要用到。

下载云巴的api,然后包入自己的web页面中。(注意:yunba-js-sdk.js依赖socket.io-1.3.5.min.js这个文件,因此需要先引入socket.io-1.3.5.min.js这个文件。)

一、新建连接对象

云巴的新建连接对象有两种,一种是支持ssl的,一种是不支持ssl的类型。

支持ssl的

yunba = new Yunba({server: 'https://sock.yunba.io', port: 443, appkey: appkey});

不支持ssl的

yunba = new Yunba({server: 'http://sock.yunba.io', port: 3000, appkey: appkey});

建议使用ssl方式,更加的安全。


二、初始化云巴的连接服务

我们所使用的函数是yunba.init(function(success));这个函数只有一个参数,那就是执行后的回调函数。function是一个回调函数,参数只有一个,成功与不成功


三、连接云巴的服务器

这里我们通常使用yunba.connect_by_customid(clientid, function(success, msg, sessionid))函数,虽然云巴也提供yunba.connect(function(success, msg, sessionid))函数,但是由于云巴是依靠日活计费的,yunba.connect任意一次连接都会记录成为一个日活,这样就会造成不必要的资源浪费。回掉函数的参数有三个,第一个是返回是否成功,第二个是返回失败的原因,第三个没用过,我也不知道。


四、订阅topic服务

云巴提供的函数为yunba.subscribe(arg1, function(success, msg));这里第一个参数是一个js的arr类型,参数只有一个topic。function也是一个回调函数,第一个参数是指是否执行成功,第二个参数是告诉我们如果失败了,原因何在。


五、设置接收消息后的处理函数

云巴提供的函数为yunba.set_message_cb(function (data));data是一个js的对象,包含收到的消息的大部分信息。


六、调用顺序

云巴中大量用到了回调函数,因此大家也一定注意到了,这些调用全部都是异步操作。每次执行下一步时都必须在上一步的回调函数中去做。否则会调用失败。


七:云巴发送消息

云巴的发送消息比较简单,直接用任意方式访问

http://rest.yunba.io:8080?method=<method>&appkey=<app-key>&seckey=<secret-key>&topic=<topic>&msg="your message"

即可。


八、代码演示

<?php
if(isset($_POST['act']) && $_POST['act'] == 'sendyunba') {
    $url = "http://rest.yunba.io:8080?method=publish&appkey=".$_POST["sendappkey"]."&seckey=".$_POST["sendsecretkey"]."&topic=".$_POST["sendtopic"]."&msg=".urlencode($_POST["sendmsg"]);
    file_get_contents($url);
    echo "发送成功";
    exit;
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>云巴测试环境</title>
        <script type="text/javascript" src="socket.io-1.3.5.min.js"></script>
        <script type="text/javascript" src="yunba-js-sdk.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
        <script type="text/javascript">
            var yunba;
            function yunbaconnect() {
                var appkey = $("#yunbaappkey").val();
                var clientid = $("#yunbaclientid").val();
                var topic = $("#yunbatopic").val();
                if($("#yunbaisssl").is(":checked"))
                    yunba = new Yunba({server: 'https://sock.yunba.io', port: 443, appkey: appkey});
                else
                    yunba = new Yunba({server: 'http://sock.yunba.io', port: 3000, appkey: appkey});
                yunba.init(function (success) {//初始化云巴服务
                    if (success) {//初始化云巴服务成功
                        yunba.connect_by_customid(clientid, function (success, msg, sessionid) {//初始化云巴服务并且通过指定clientid连接服务器
                            if (success) {//连接服务器成功
                                yunba.subscribe({'topic': topic}, function (success, msg) {//订阅topic
                                    if (success) {
                                        $('#msg').append("连接成功<br />");
                                    } else {
                                        $('#msg').append(msg + "<br />");
                                    }
                                });
                                yunba.set_message_cb(function (data) {//设置接收消息的函数
                                    $('#msg').append("Topic:" + data.topic + ",Msg:" + data.msg + "<br />");
                                });
                            } else {
                                $('#msg').append(msg + "<br />");
                            }
                        });
                    }
                });
            }
            function yunbadisconnect() {
                yunba.disconnect(function (success, msg) {
                    if (success) {
                        $('#msg').append("连接断开<br />");
                    } else {
                        $('#msg').append("断开连接失败<br />");
                    }
                });
            }
            function send() {
                $.ajax({
                    url: '<?php echo $_SERVER['REQUEST_URI'];?>',
                    method: 'post',
                    data: {
                        act: 'sendyunba',
                        sendappkey: $('#sendappkey').val(),
                        sendsecretkey: $('#sendsecretkey').val(),
                        sendtopic: $('#sendtopic').val(),
                        sendmsg: $('#sendmsg').val()
                    },
                    success: function(data) {
                        if(data == '发送成功') {
                            $('#msg').append("发送成功<br />");
                        } else {
                            console.log(data);
                            $('#msg').append("发送失败<br />");
                        }
                    }
                });
            }
        </script>
    </head>
    <body>
        <div style="float:left;width:40%">
        <div>
        <h2>连接云巴</h2>
        <label for="yunbaappkey">云巴appkey</label><input id="yunbaappkey" type="text" value=""/><br />
        <label for="yunbaclientid">云巴用户id</label><input id="yunbaclientid" type="text"/><br />
        <label for="yunbatopic">云巴topic</label><input id="yunbatopic" type="text" /><br />
        <label for="yunbaisssl">是否使用ssl</label><input id="yunbaisssl" type="checkbox" /><br />
        <button type="button" onclick="yunbaconnect();" />连接</button>
        <button type="button" onclick="yunbadisconnect();" />断开</button>
        </div>
        <div>
        <h2>发送消息</h2>
        <label for="sendappkey">云巴appkey</label><input id="sendappkey" value=""/><br />
        <label for="sendsecretkey">云巴secretkey</label><input id="sendsecretkey" value=""/><br />
        <label for="sendtopic">云巴topic</label><input id="sendtopic" /><br />
        <label for="sendmsg">云巴消息</label><input id="sendmsg"/><br />
        <button type="button" onclick="send();" />发送</button>
        </div>
        </div>
        <div id="msg" style="float:left;width:40%"> 
    </body>
</html>





优秀产品推荐:可编程网络IO控制器

上一篇:linux下限制某个文件夹容量

下一篇:推送服务之百度iot hub

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务