之前有几篇教大家搭建自己的私有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>