w***@163.com
w***@163.com
  • 发布:2024-01-10 15:58
  • 更新:2024-01-10 15:58
  • 阅读:880

ios下websocket接收消息,服务端关闭返回1001状态码,错误信息为Stream end encountered的问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.6.1

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: iOS

手机系统版本号: iOS 17

手机厂商: 苹果

手机机型: 12promax

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
export default {  
        data() {  
            return {  
                title: 'Hello',  
                content: ''  
            }  
        },  
        onLoad() {  
            // 注意这里有时序问题,  
            // 如果 uni.connectSocket 还没回调 uni.onSocketOpen,而先调用 uni.closeSocket,那么就做不到关闭 WebSocket 的目的。  
            // 必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。  
            uni.onSocketOpen(function(e) {  
                console.log('打开', e);  
                uni.sendSocketMessage({  
                    data: JSON.stringify({  
                        "history": [],  
                        "input": "11"  
                    }),  
                    complete(res) {  
                        console.log('发送消息成功', res);  
                    }  
                })  
            });  

            uni.onSocketClose(function(res) {  
                console.log('WebSocket 已关闭!', res);  
                uni.closeSocket({  
                    code: 1000  
                })  
            });  

            uni.onSocketMessage(function(res) {  
                console.log('收到服务器内容:' + res.data);  
                const data = JSON.parse(res.data)  
                if (data.code === 10010) {  
                    uni.closeSocket({  
                        code: 1000  
                    })  
                }  
            });  

            uni.onSocketError(function(res) {  
                console.log('WebSocket连接打开失败,请检查!', res);  
            });  
        },  
        methods: {  
            send() {  
                uni.connectSocket({  
                    url: 'ws://xxx',  
                    complete(res) {  
                        console.log('res',res);  
                    },  
                    header: {  
                        'Authorization': 'xxx'  
                    }  
                });  
            }  
        }  
    }

操作步骤:

客户端发送消息,有几次会出现这个错误。

预期结果:

完整接收服务端传过来的消息,客户端正常关闭。

实际结果:

触发了服务端关闭事件,返回信息为:
{
"code": 1001,
"reason": "Stream end encountered"
}

bug描述:

使用socketapi访问websocket的时候,抓包显示服务端把信息都全部返回后,客户端有时可以完整接收服务端的消息,有时候会未接收完服务端的消息,就会触发服务端关闭事件,返回1001状态码,错误信息为Stream end encountered
{
"code": 1001,
"reason": "Stream end encountered"
}

2024-01-10 15:58 负责人:DCloud_iOS_XHY 分享
已邀请:

要回复问题请先登录注册