https://developers.weixin.qq.com/minigame/dev/wxcloudrun/src/
问题:wx.cloud.connectContainer无法连接后端websocket,请求网址为'wss://express-u811-prod-xxx-xxx.ap-xxx.run.wxcloudrun.com/ws',报错1006,都没请求到后端。
容器启动绑定端口27082:27081。直接请求ws://127.0.0.1:27081/ws,是能建立连接的。
代码:用的是官方示例
客户端
export const websocketTest = async (flag) => {
const { socketTask } = await wx.cloud.connectContainer({
config: {
env: env,
},
service: server_name, // 替换自己的服务名
path: '/ws'
})
socketTask.onMessage(function (res) {
console.log(flag, '【WEBSOCKET】', res.data)
})
socketTask.onOpen(async function (res) {
console.log(flag,'【WEBSOCKET】', '链接成功!', res)
socketTask.send({
data: '这是小程序消息'
})
})
socketTask.onClose(async function (err) {
console.log(flag,'【WEBSOCKET】链接关闭!')
console.log(err)
})
return socketTask
}
websocketTest('1')
websocketTest('2') // 故意多发起一次链接
node后端
const application = express();
const {app} = expressWS(application)
const connect = {}
app.ws('/ws', function (ws, req) {
let openid = req.headers['x-wx-openid'] // 从header中获取用户openid信息
if (openid == null) { // 如果不存在则不是微信侧发起的
openid = new Date().getTime() // 使用时间戳代替
}
if (connect[openid] != null) { // 判断用户是否有连接
ws.send('当前用户已经在其他设备连接过,无法重复连接') // 发送重复连接信息
ws.close() // 关闭连接
} else {
connect[openid] = { // 记录用户信息
openid: openid, // 用户openid
source: req.headers['x-wx-source'] || '非微信', // 用户微信来源
unionid: req.headers['x-wx-unionid'] || '-', // 用户unionid
ip: req.headers['x-forwarded-for'] || '未知' // 用户所在ip地址
}
console.log('链接请求头信息', req.headers)
ws.on('message', function (msg) {
console.log('收到消息:', msg)
ws.send(`收到-${msg}`)
})
ws.on('error', function(error) {
console.error('WebSocket连接错误:', error);
});
ws.on('close', function (code, reason) {
console.log('链接断开:', openid, code, reason.toString('utf-8'))
delete connect[openid]
})
console.log("end....")
}
})
觉得就是容器网关没能解析这网址,但我又不知如何配置。callContainer的http请求网关就能解析,头疼。大神门救一下