收藏
回答

websocket 接收不到数据

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug websocket 工具 6.6.6 1.9.98


微信发送给服务端是数据能正常接收到,但是服务端发送给微信端的接收不到,服务端和网页的websocket交互正常,但是和微信这就不行了

微信代码如下

var urls = require('../constant.js').urls;
var Stomp = require('../lib/stomp.js').Stomp;
 
function request(url, data, success) {
  wx.getStorage({
    key: 'net_sessionid',
    success: function (sessionIdRes) {
      console.log('sessionID:' + sessionIdRes.data);
      wx.request({
        url: url,
        data: data,
        method: 'POST',
        dataType: 'json',
        header: {
          'content-type': 'application/x-www-form-urlencoded', // 默认值
          'Cookie': 'JSESSIONID=' + sessionIdRes.data
        },
        success: function (res) {
          success(res);
        }
      })
    }
  })
}
 
function sendSocketMessage(msg) {
  console.log('send msg:')
  console.log(msg);
  wx.sendSocketMessage({
    data: msg,
    success: function (res) {
      console.log('消息发送成功');
      wx.setStorage({
        key: "msg_",
        data: msg
      })
    }
  })
}
 
function onSocketOpen() {
 
}
var ws = {
  send: sendSocketMessage,
  onopen: null,
  onmessage: null
}
var stompClient = Stomp.over(ws);
 
function testSocet() {
  wx.connectSocket({
    url: 'wss://192.168.1.85:8443/websocket',
    //url: 'ws://127.0.0.1:8080/websocket/websocket',
  });
  wx.onSocketMessage(function (res) {
    console.log('收到服务器内容:');
    console.log('收到服务器内容:' + res.data)
  });
   
  wx.onSocketClose(function (res) {
    console.log('WebSocket 已关闭!')
  })
   
  wx.onSocketOpen(function (res) {
    console.log('WebSocket连接已打开!')
    stompClient.send("/app/req", {}, "ssss");
  })
  Stomp.setInterval = function (interval, f) {
    return setInterval(f, interval);
  };
  Stomp.clearInterval = function (id) {
    return clearInterval(id);
  };
 
  wx.onSocketError(function (res) {
    console.log('WebSocket连接打开失败,请检查!')
  })
}
 
// stompClient.connect({}
// // ,
//   // function connectCallback(frame) {
//   //   console.log('已连接');
//   //   stompClient.subscribe('/topic/resp', function (response) {
//   //     console.log("返回内容:" + response.body);
//   //   });
//   // },
//   // function errorCallBack(error) {
//   //   console.log('连接失败【' + error + '】');
//   // }
// );
 
function init() {
  //getSession();
  testSocet();
}
 
function getSession() {
  wx.request({
    url: urls.getSession,
    method: 'POST',
    dataType: 'json',
    header: {
      'content-type': 'application/x-www-form-urlencoded', // 默认值
    },
    success: function (res) {
      wx.setStorage({
        key: "net_sessionid",
        data: res.data.data
      })
    }
  })
}
 
module.exports = {
  request: request,
  init: init
}

结果


服务端代码


package com.hykj.zonechat.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.annotation.SendToUser;
import org.springframework.stereotype.Controller;
@Controller
public class SocketController {
   private final Logger log = LoggerFactory.getLogger(this.getClass());
   @Autowired
   private SimpMessagingTemplate simpMessagingTemplate;
   @MessageMapping("/req")
   public void sendPublicMessage(String msg) {
       log.info("收到消息:"+msg);
       simpMessagingTemplate.convertAndSend("/topic/resp", "qwerty");
   }
}


package com.hykj.zonechat.sys;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
   @Override
   public void registerStompEndpoints(StompEndpointRegistry registry) {
       registry.addEndpoint("/websocket").setAllowedOrigins("*");
   }
   @Override
   public void configureMessageBroker(MessageBrokerRegistry config) {
       config.enableSimpleBroker( "/topic/");
       config.setApplicationDestinationPrefixes("/app");
   }
   @Override
   public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
       registration.setMessageSizeLimit(128 * 1024);
   }
}

结果


网页代码

<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
   <meta charset="UTF-8">
   <script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js">script>
   <script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.js">script>
   <title>socketTesttitle>
head>
<body>
<button onclick="send('aaaaaaaaaa')">Sendbutton>
<table id='state-info'>table>
body>
<script type="text/javascript">
   var socket = new WebSocket("wss://127.0.0.1:8443/websocket");
   var stompClient = Stomp.over(socket);
   stompClient.connect({},
       function connectCallback(frame) {
           // 连接成功时(服务器响应 CONNECTED 帧)的回调方法
           document.getElementById("state-info").innerHTML = "连接成功";
           console.log('已连接【' + frame + '】');
           stompClient.subscribe('/topic/resp', function (response) {
               alert(response.body)
           });
       },
       function errorCallBack(error) {
           // 连接失败时(服务器响应 ERROR 帧)的回调方法
           document.getElementById("state-info").innerHTML = "连接失败";
           console.log('连接失败【' + error + '】');
       }
   );
   function send(txt) {
       stompClient.send("/app/req", {}, txt);
   }
script>
html>

结果



这个问题,弄了好久都没搞定,后台用的是springboot 2.0.1.RELEASE 版本  是希望借助websocket 和stomp协议进行交互,但是在微信和服务端进行websocket交互时出现问题了,就是微信发给后台的数据,后台能够接收到,但是后台发送给微信小程序的数据,微信端却接收不到,期间用网页进行测试,发现网页能够接收到数据,然后又用最基础的servlet建立一个简单的websocket进行测试,发现微信端还是收不到数据,

希望各位前辈能给予解惑,谢谢,联系方式qq 1324618209



最后一次编辑于  2018-04-18
回答关注问题邀请回答
收藏

3 个回答

  • 尼古拉斯
    尼古拉斯
    2022-11-30

    两年了, 环境恶劣啊....

    2022-11-30
    有用
    回复
  • 卓蒋
    卓蒋
    2019-11-12

    您好,请问这个问题解决了吗,可以的话分享下解决方法?

    2019-11-12
    有用
    回复
  • Turing
    Turing
    2018-05-23

    ...

    2018-05-23
    有用
    回复 1
    • lambo.chen
      lambo.chen
      2019-03-25

      您好,请问下具体是怎么配置呢?能分享下代码吗?谢谢

      2019-03-25
      回复
登录 后发表内容