ModelScope-FunASR的WebSocket连接中断后,服务端不会自动关闭连接

简介: ModelScope-FunASR的WebSocket连接中断后,服务端不会自动关闭连接【1月更文挑战第11天】【1月更文挑战第55篇】

ModelScope-FunASR的WebSocket连接中断后,服务端不会自动关闭连接,除非设置了心跳检测机制。

心跳检测机制:在网络通信中,心跳检测是一种机制,用于定期发送消息来确认连接的活性。如果客户端在与服务端建立WebSocket连接后断网或者浏览器窗口关闭,服务端通常不会立即检测到,因为WebSocket连接在建立后是长期保持开放的,直到有一方明确关闭连接。

心跳机制的实现:要实现在客户端断网的情况下让服务端主动关闭连接,可以在服务端设置心跳检测(heartbeat checking)。当客户端定期发送空消息(ping)到服务端时,服务端会启动心跳检测。如果服务端在一定时间内没有收到客户端发来的消息,则可以认为客户端已经断线,并主动执行close()方法关闭连接。

Netty实现心跳机制:以使用Netty为例,可以在ChannelInitializer类中添加IdleStateHandler,它会在读操作空闲、写操作空闲或全部空闲状态达到指定时间后触发IdleStateEvent。在IdleStateEvent触发时,可以关闭不再活跃的连接。

示例代码:

public class WSServerInitializer extends ChannelInitializer<SocketChannel> {
   
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
   
        ChannelPipeline pipeline = ch.pipeline();
        // ... 其他 handler 添加
        pipeline.addLast(new IdleStateHandler(30, 0, 0, TimeUnit.SECONDS));
        pipeline.addLast(new ServerHeartBeat()); // 自定义心跳处理类
        // ... 其他 handler 添加
    }
}

public class ServerHeartBeat extends ChannelInboundHandlerAdapter {
   
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
   
        if (evt instanceof IdleStateEvent) {
   
            // 超时事件
            IdleStateEvent idleEvent = (IdleStateEvent) evt;
            if (idleEvent.state() == IdleState.READER_IDLE) {
   
                // 读超时
                ctx.channel().close(); // 关闭通道连接
            }
        }
        super.userEventTriggered(ctx, evt);
    }
}

在这个例子中,如果服务端在30秒内没有读取到客户端的任何数据,则会关闭连接。

总结:在没有心跳机制的情况下,服务端不会自动关闭WebSocket连接,需要通过心跳检测来确定连接是否仍然活跃,并在检测到连接中断时主动关闭连接。

目录
相关文章
|
6月前
|
网络协议 数据安全/隐私保护
百度搜索:蓝易云【WebSocket:从建立连接到关闭的完整流程】
这是WebSocket的基本流程,它提供了一种实时、双向的通信方式,适用于需要实时数据传输的应用场景,如聊天应用、实时游戏等。
200 2
|
1月前
uni-app 62websocket连接权限验证和强制下线
uni-app 62websocket连接权限验证和强制下线
22 3
|
3月前
|
Dart 小程序 前端开发
WebSocket 解析与应用(包含web前端、服务端、小程序、dart/flutter中的用法)
WebSocket 解析与应用(包含web前端、服务端、小程序、dart/flutter中的用法)
198 0
|
3月前
|
测试技术
Netty4 websocket 开启服务端并设置IP和端口号
Netty4 websocket 开启服务端并设置IP和端口号
68 0
|
3月前
|
网络协议 Java 应用服务中间件
如何将本地websocket发布至公网并实现远程访问服务端
如何将本地websocket发布至公网并实现远程访问服务端
63 0
|
7月前
|
应用服务中间件 nginx
通过nginx访问连接websocket 错误 failed: Error during WebSocket handshake: Unexpected response code: 400
通过nginx访问连接websocket 错误 failed: Error during WebSocket handshake: Unexpected response code: 400
209 0
|
7月前
使用WebSocket实现服务端和客户端的通信
使用WebSocket实现服务端和客户端的通信
60 0
|
9月前
|
JSON 关系型数据库 MySQL
php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据
php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据
113 0
|
9月前
|
移动开发 缓存 安全
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
本文探索了在Linux环境下实现WebSocket服务器的网络设计,将WebSocket服务器作为连接世界的纽带,为读者介绍了如何掌握Linux网络设计中的关键技术。文章从实现WebSocket协议到优化服务器性能和稳定性等方面进行了深入讲解。通过学习本文,读者将能够全面了解WebSocket服务器的原理和工作机制,并获得构建高效、可靠的Linux WebSocket服务器的实用技巧和最佳实践。无论是初学者还是有经验的开发人员,都能从本文中获得宝贵的知识和启发,进一步提升在Linux网络设计中的能力。让我们一同打造连接世界的纽带,掌握Linux网络设计中WebSocket服务器的精髓。
133 0
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
|
9月前
|
IDE 物联网 开发工具
ESP32连接云服务器【WebSocket】
ESP32 芯片基于 ARM Cortex-M 内核,具有 32 位地址空间,支持 Wi-Fi、蓝牙和其他无线连接,以及多种外设接口,如 GPIO、定时器、PWM、串口等。🚂到这里,你可以到文件夹中的bin目录中,可以找到已经存在了activate文件。🎈接着,在宝塔面板的软件商店中导入➡️➡️Python项目管理器⬅️⬅️。🎈首先是本次需要挂在服务器上的脚本代码➡️Server.py⬇️。👨‍💻因此,有关云服务器和宝塔面板的初始配置,这里将直接跳过👋。🗽其中项目路径等内容,可以参照下图填写⬇️。
ESP32连接云服务器【WebSocket】