帖子
帖子
用户
博客
课程
1234567下一页
返回列表 发新帖
显示全部楼层
216
帖子
5
勋章
5909
Y币

webSocket模块(即时通讯)demo示例

[复制链接]
发表于 2017-8-12 09:00:04
本帖最后由 52yaoer 于 2019-7-13 15:14 编辑

WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程。其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。


点击进入模块详情


WebSocketModule.html

  1. <!DOCTYPE html>
  2. <html>

  3. <head>
  4.     <title>Module Develop</title>
  5.     <meta charset="utf-8">
  6.     <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
  7.     <style type="text/css">
  8.         html,
  9.         body {
  10.             height: 100%
  11.         }

  12.         body {
  13.             background-color: #fff;
  14.             margin: 0;
  15.         }

  16.         #wrap {
  17.             height: 100%;
  18.             position: relative;
  19.         }

  20.         #header {
  21.             padding-top: 20px;
  22.             background-color: #5082c2;
  23.             height: 44px;
  24.             position: relative;
  25.         }

  26.         #header h1 {
  27.             font-size: 20px;
  28.             height: 44px;
  29.             line-height: 44px;
  30.             margin: 0em;
  31.             color: #fff;
  32.             margin-left: 100px;
  33.             margin-right: 100px;
  34.             text-align: center;
  35.         }

  36.         #main {
  37.             display: -webkit-box;
  38.             -webkit-box-orient: vertical;
  39.             -webkit-box-pack: center;
  40.         }

  41.         a.button {
  42.             display: -webkit-box;
  43.             -webkit-box-orient: vertical;
  44.             -webkit-box-pack: center;
  45.             -webkit-box-align: center;
  46.             height: 32px;
  47.             margin: 8px;
  48.             background-color: rgba(240, 240, 240, 1.0);
  49.             border-color: rgba(220, 220, 220, 1.0);
  50.             border-width: 2px;
  51.             border-style: solid;
  52.         }

  53.         a.active {
  54.             background-color: rgba(240, 240, 240, 0.7);
  55.         }
  56.     </style>
  57. </head>

  58. <body>
  59.     <div id="wrap">
  60.         <div id="main">
  61.             <input type="text" class="input1" name="url" id="url" size="40" value="wss://ws**.**:443" />
  62.             <a class="button" tapmode="active" onclick="addEventListener1()">监听消息事件方法</a>
  63.             <a class="button" tapmode="active" onclick="open1()">连接socket</a>
  64.             <a class="button" tapmode="active" onclick="send1()">发送消息</a>
  65.             <a class="button" tapmode="active" onclick="close1()">关闭socket</a>
  66.             <textarea id="deviceid" name="deviceid" cols="30" rows="50"></textarea>
  67.         </div>
  68.     </div>
  69. </body>
  70. <script type="text/javascript">
  71.     var demo = null;
  72.     //ws://121.40.165.18:8800
  73.     apiready = function() {
  74.         demo = api.require('webSocket');
  75.         if (!demo) {
  76.             alert("请添加模块后编译");
  77.             return;
  78.         }
  79.     }
  80.     var demo;

  81.     function addEventListener1() {

  82.         demo.addEventListener(function(ret, err) {
  83.             if (ret.status == true && ret.evenType == 'ReturnData') {
  84.                 var _deviceid = document.getElementById("deviceid").value;
  85.                 document.getElementById("deviceid").value = ret.data + "\n" + _deviceid;
  86.             } else {
  87.                 alert(JSON.stringify(ret) + "  " + JSON.stringify(err));
  88.             }
  89.         });

  90.         alert("监听设置成功");
  91.     }

  92.     function open1() {
  93.         var _url = document.getElementById("url").value;
  94.         if (_url == '') {
  95.             alert("地址不能为空");
  96.             return;
  97.         }

  98.         demo.open({
  99.             url: _url, //'ws://192.168.1.102:8887/socket'
  100.             pingInterval : 1,
  101.                                     pingData : 'ping',
  102.                                     isBtyes : true
  103.         }, function(ret, err) {
  104.             alert(JSON.stringify(ret) + "  " + JSON.stringify(err));
  105.         });
  106.     }

  107.     function send1() {
  108.         demo.send({
  109.             data: '我是安卓移动手机',
  110.             isBtyes : true
  111.         }, function(ret, err) {
  112.             alert(JSON.stringify(ret) + "  " + JSON.stringify(err));
  113.         });
  114.     }

  115.     function close1() {
  116.         demo.close(function(ret, err) {
  117.             alert(JSON.stringify(ret) + "  " + JSON.stringify(err));
  118.         });
  119.     }
  120. </script>

  121. </html>
复制代码





8
帖子
0
勋章
238
Y币
这个 WebSocket 优点不用多次握手,不过就apicloud这种情况,每个win都是一个网页每次都要握手就有点违背了WebSocket的优点了。
0
帖子
0
勋章
238
Y币
你好,想问一下,你那个模块在全局加密的时候能用么,我用原生的websocket,没全局加密就可以,一全局加密就不行了,如果你这个能用我就买了
216
帖子
5
勋章
5909
Y币
lucifer998 发表于 2017-11-1 10:53
你好,想问一下,你那个模块在全局加密的时候能用么,我用原生的websocket,没全局加密就可以,一全局加密 ...

可以实现。你可以测试下的。
0
帖子
0
勋章
5909
Y币
52yaoer 发表于 2017-11-1 11:24
可以实现。你可以测试下的。

你关闭链接的close我咋试了没效果呀,方便留个联系方式嘛
216
帖子
5
勋章
5909
Y币
lucifer998 发表于 2017-11-1 14:48
你关闭链接的close我咋试了没效果呀,方便留个联系方式嘛

qq  176142998
1
帖子
0
勋章
3
Y币
请大佬帮我看看,我看了案例感觉我没有用错啊,就是不出来
html部分:
<p><div class="aui-btn aui-btn-block mycolor" onclick="connectWifi()">连接</div></p>

js部分:
var demo;
apiready = function(){
    demo = api.require('webSocket');
    demo.addEventListener(function(ret, err) {
        alert('监听返回'+JSON.stringify(ret) + "  " + JSON.stringify(err));

        if(ret.evenType=='Closed'){
          connect();
        }else if(ret.evenType=='Connected'){
          send();
        }else if(ret.evenType=='ReturnData'){
          alert('得到返回数据啦哈哈哈'+ret.data);
        }
    });
    appInit();

}
//点击连接
function connect(){
  demo.open({
      url : 'ws://192.168.31.225:8080/socket'
  }, function(ret, err) {

      alert('连接成功'+JSON.stringify(ret) + "  " + JSON.stringify(err))
      if(ret.status==true){
        alert('开始发送数据');
        send();

      }else if(err.code=='1'){
        alert('open出错,开始重新连接,报错信息:'+JSON.stringify(err));
        connect();
      }

  });



}

//连接发送数据
function send(){
  alert('进入发送数据方法');
  var backret = -1;
  var err = -1;
  demo.send({
      data : 'ABC192.168.31.211'
  }, function(ret, err) {
    if (ret) {
      backret = ret;
      err = err;
      alert('发送成功返回数据'+JSON.stringify(ret) + "  " + JSON.stringify(err));
      return ret;
    }else if (err) {
      alert('发送失败'+ JSON.stringify(err));
    }

  });
  //30秒内没有收到返回值就重新发送数据
  setTimeout(function(){
    if(backret==-1){
      alert('没有得到返回数据继续发送');
      send();
    }else{

      alert('终于有返回值啦,返回的是'+JSON.stringify(backret) + "  " + JSON.stringify(err));
      if(backret.status==false){
        alert('再次发送数据的的返回值竟然是false,还是重连吧');
        connect();
      }else{
        alert(backret);
      }

    }
  },30000);
}


我的问题是成功连接监听那里没有反应,而且数据发送成功之后,返回数据说“请先调用open接口”,这个接口一开始我就调用了呀,不知道怎么解决,大神有空可以帮忙看一下吗
2
帖子
0
勋章
7
Y币
支持一下,拿云币
21
帖子
0
勋章
345
Y币
这个模块好,逆向发消息,请问楼主可以出一个详细的说明吗?

54
帖子
2
勋章
1527
Y币
话说这个有服务器端吗?
1234567下一页
您需要登录后才可以回帖 登录

本版积分规则