2019-12-09

WebSocket连接问题:Error during WebSocket handshake: Unexpected response code: 200

今天小程序对接后端的socket服务的时候遇到了该问题

image.png

在网上找到的大多数都是被后端拦截,但是后来在拦截器看到已经将该路径放行了

image.png

后来突然反应过来原来小程序的是通过原生的wesocket来连接的,我后端注册stomp的端点使用的SocketJs协议,这是之前为一个web项目的通过socketJs通过的一个端点,以为小程序可以直接复用

image.png

为了不影响之前项目的运作,就继续在下面新增了一个端点,并去掉.withSockJS(),小程序端x将域名后的连接路径改为对应的路径(我的是 /wechat/websocket)则可以通过原生websocket正常连接了

image.png

OK!!!

最后再附上小程序端stomp+websocket的代码 (代码原文:https://zhuanlan.zhihu.com/p/24825459?refer=frame

)

var socketOpen = false
var socketMsgQueue = []
function sendSocketMessage(msg) {
    console.log('send msg:')
    console.log(msg);
    if (socketOpen) {
        wx.sendSocketMessage({
            data: msg
        })
    } else {
        socketMsgQueue.push(msg)
    }
}

/////////////////////////////////////////////////////
var ws = {
    send: sendSocketMessage,
    onopen: null,
    onmessage: null
}

wx.connectSocket({
    url: 'wss://workyun.com/wechat/websocket'
})
wx.onSocketOpen(function (res) {
    console.log('WebSocket连接已打开!')

    socketOpen = true
    for (var i = 0; i < socketMsgQueue.length; i++) {
        sendSocketMessage(socketMsgQueue[i])
    }
    socketMsgQueue = []

    ws.onopen && ws.onopen()  
})

wx.onSocketMessage(function (res) {
    console.log('收到onmessage事件:', res)
    ws.onmessage && ws.onmessage(res)
})

var Stomp = require('../stomp.js').Stomp;
Stomp.setInterval = function () { }
Stomp.clearInterval = function () { }
var client = Stomp.over(ws);

var destination = '/topic/myTopic';
client.connect('user', 'pass', function (sessionId) {
    console.log('sessionId', sessionId)

    client.subscribe(destination, function (body, headers) {
        console.log('From MQ:', body);
    });

    client.send(destination, { priority: 9 }, 'hello workyun.com !');
})

你可能感兴趣的:(2019-12-09)