移动端不能连接websocket

  1. 自己写了个测试demo,放到电脑的浏览器中测试正常,可以打印websocket的open连接信息,但是放到手机上就不执行open事件了,直接close,为什么?

浏览器都是支持websocket的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
</body>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
<script>
    var ws = new WebSocket("ws://139.129.118.14:8083/killBoss/userSocket");

    ws.onopen = function(evt) { 
        alert(1)
        console.log("Connection open ..."); 
        var obj={
             "code": 0,
             "latitude": 1,
             "longitude": 2,
             "prop": {
              "describe": " this is a prop descibe",
              "id": 1,
              "isDelete": 0,
              "status": 0,
              "type": 2
             },
             "user": {
              "headImageUrl": "asdfasdfasdfadfadf",
              "id": 1,
              "isDelete": 0,
              "openId": "asdfadfadf",
              "status": {
               "attackers": [],
               "blood": 3,
               "code": 0,
               "latitude": 1,
               "killNo": 4,
               "killUser": 1,
               "longitude": 2,
               "rank": 0,
               "victim": null
              },
              "userName": "zhangsan"
             }
        }
        ws.send(obj)
    };

    ws.onmessage = function(evt) {
      console.log( "Received Message: " + evt.data);
      // ws.close();
    };

    ws.onclose = function(evt) {
        alert("close")
        console.log("Connection closed.");
        console.log(evt)
    };


    ws.onerror=function(evt){
      console.log("error",evt)
    }

</script>

<script>
    $.ajax({
        url:'http://192.168.0.106:8081/text.json',
        success:function(res){
            console.log(res)
        }
    })
</script>
</html>

移动端报错如下,我实在微信开发者工具中看的
图片描述

也在排查是不是这个原因 域名问题

电脑上是可以打印open的,为什么手机就不能打印open
求大神指点

阅读 9.3k
2 个回答

能执行就怪了!

websocket在手机webview中不可用.

遇到过这种需求, 我的解决方案是在手机端使用native原生socket来实现, 做成混合app.

可以写个心跳包

    window.setInterval(function(){ //每隔1分钟发送一次心跳,避免websocket连接因超时而自动断开
        var ping = {"type":"ping"};
        socket.send(JSON.stringify(ping));
    },1000*60);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题