以下为uniappx的简单websocket代码:
let overallSocket : SocketTask | null = null
export function openSocket(){
let token = ""
if(haveToken()){
token = getToken() as string
}else{
return
}
const webSocketUrl = `wss://....../ws?token=${token}`
//判断是否已连接
if(isConnected.value)return
//进行连接
overallSocket = uni.connectSocket({
url:webSocketUrl
})
//回调函数编写
//监听打开
overallSocket?.onOpen((res:OnSocketOpenCallbackResult)=>{
console.log("websocket已打开")
isConnected.value = true
//重置重连次数
resetReconnect()
})
//监听关闭
overallSocket?.onClose(()=>{
console.log("websocket已关闭")
//已断开
isConnected.value=false
isOnline.value = false
})
//监听失败
overallSocket?.onError((res:GeneralCallbackResult)=>{
console.log(res.errMsg)
//已断开
isConnected.value=false
isOnline.value = false
//尝试重连
reconnect()
})
//监听接收消息(兼容后端大模型流式传输)
overallSocket?.onMessage((res:OnSocketMessageCallbackResult)=>{
try{
const d = JSON.parse(res.data as string) as UTSJSONObject
const type = d.get("type") as string
switch(type){
case "welcome":
// 服务端连接欢迎信息,标记在线并广播消息
isOnline.value = true
uni.$emit("onChatBegin")
break
case "chat_response_chunk":
// 大模型的流式分片
const chunk = d.get("content") as string
// 广播每个分片,页面可订阅并进行拼接显示
uni.$emit("onChatResponseChunk", chunk)
break
case "stream_end":
// 流式结束事件
uni.$emit("onChatResponseEnd")
break
default:
// 未知类型,打印以便调试
console.warn("unknown websocket message type:", type)
}
}catch(e){
console.error("failed to parse websocket message:", e)
}
})
}
export function sendMGSSocket(data:SendMSG){
try{
const payload = JSON.stringify(data)
overallSocket?.send({ data: payload })
}catch(e){
console.error("failed to send websocket message:", e)
}
}
之前这段代码在安卓上测试一切正常,但转到微信小程序上后立马报错,HBuilder X 4.85的语法检测一切正常
以下为微信开发者工具测试时的报错:
TypeError: s.onOpen is not a function
at Object.l [as openSocket] (websocket.js? [sm]:1)
at Proxy.onLoad (chat.js? [sm]:1)
at To (vendor.js? [sm]:7)
at Io (vendor.js? [sm]:7)
at Array.t.__weh.t.__weh (vendor.js? [sm]:8)
at vendor.js? [sm]:8
at Proxy.Qi (vendor.js? [sm]:8)
at mi.u.onLoad (vendor.js? [sm]:8)
at mi.<anonymous> (VM51 WASubContext.js:1)
at mi.l.__callPageLifeTime__ (VM51 WASubContext.js:1)(env: Windows,mp,1.06.2504060; lib: 3.11.2)
websocket.js? [sm]:1 failed to send websocket message: TypeError: s.send is not a function
at Object.exports.sendMGSSocket (websocket.js? [sm]:1)
at Proxy.sendMSG (chat.js? [sm]:1)
at To (vendor.js? [sm]:7)
at Io (vendor.js? [sm]:7)
at i (vendor.js? [sm]:8)
at mi.n [as e3] (vendor.js? [sm]:8)
at mi.<anonymous> (VM51 WASubContext.js:1)
at o.safeCallback (VM51 WASubContext.js:1)
at o.call (VM51 WASubContext.js:1)
at r (VM51 WASubContext.js:1)(env: Windows,mp,1.06.2504060; lib: 3.11.2)
TypeError: s.close is not a function
at Object.exports.closeSocket (websocket.js? [sm]:1)
at Proxy.onUnload (chat.js? [sm]:1)
at To (vendor.js? [sm]:7)
at Io (vendor.js? [sm]:7)
at Array.t.__weh.t.__weh (vendor.js? [sm]:8)
at vendor.js? [sm]:8
at Proxy.Qi (vendor.js? [sm]:8)
at mi.n.indexOf.e.<computed> [as onUnload] (vendor.js? [sm]:8)
at mi.<anonymous> (VM51 WASubContext.js:1)
at mi.l.__callPageLifeTime__ (VM51 WASubContext.js:1)(env: Windows,mp,1.06.2504060; lib: 3.11.2)
小马冲冲 (作者)
您好,以上这些报错就是在微信开发者工具中测试原生微信小程序测试时报错的,我试过直接上传到微信平台,依然是同样的问题,跪求解答?
2025-11-24 10:10
DCloud_UNI_JBB
回复 小马冲冲: 反馈到微信开发者社区
2025-11-24 10:11