博客
关于我
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
阅读量:792 次
发布时间:2023-02-15

本文共 1680 字,大约阅读时间需要 5 分钟。

SpringBoot + Vue 整合 WebSocket 实现前后端消息推送

场景

在 SpringBoot + Vue 的整合 WebSocket 实现消息推送的基础上,除了给前端页面进行数据推送,还需要对 Android 端进行数据推送。在特殊业务场景下,Android 端会经常性断网和关机,而 SpringBoot 后台部署在 Windows 服务器上。由于频繁的断网和关机,导致与后台 jar 包的 TCP 连接数不会关闭。当终端过多且累计一段时间后,TCP 连接数会超过最大连接数(默认 8000),导致服务提示拒绝连接。

在 Windows 服务器上,除了使用命令查看连接数外,还可以借助第三方工具(如 Cports 端口扫描工具)来筛选指定端口的连接。例如,可以在筛选器中输入 include both:tcp:7777,以筛选 7777 端口的连接。

实现

1. 模拟异常连接

可以通过 Android 模拟器以及 WebSocket 测试软件来模拟异常关闭连接(断网)的场景。首先建立多个连接,可以看到连接数会逐渐增多。当网络突然断开时,连接数不会立即关闭。待网络恢复后,连接数会持续增加。这时候可以通过 Cports 工具关闭连接或重启后台 jar 包以断开连接。

2. Nginx 配置 WebSocket 代理

Nginx 配置 WebSocket 代理需要参考官方文档。Nginx 从版本 1.3.13 开始支持 WebSocket 协议的代理,具体实现方式如下:

核心配置

map $http_upgrade $connection_upgrade {    default upgrade;    '' close;}

WebSocket 代理配置

location /websocket/ {    proxy_pass http://websocket;    proxy_http_version 1.1;    proxy_read_timeout 10s;    proxy_send_timeout 10s;    proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection $connection_upgrade;}

完整配置文件示例

upstream websocket {    server 10.229.36.139:7777;}map $http_upgrade $connection_upgrade {    default upgrade;    '' close;}server {    listen 88;    server_name localhost;    location / {        root html;        index index.html index.htm;    }    location /websocket/ {        proxy_pass http://websocket;        proxy_http_version 1.1;        proxy_read_timeout 10s;        proxy_send_timeout 10s;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection $connection_upgrade;    }}

3. 启动 Nginx

配置完成后,WebSocket 可以通过 88 端口进行连接。并且设置了 10 秒的超时时间,超过 10 秒没有消息传输就会关闭连接。

总结

通过上述配置,可以实现 WebSocket 的消息推送功能。前端页面和 Android 端都能正常接收数据。在特殊场景下,通过重启服务或关闭连接,可以有效管理 WebSocket 连接数,避免连接过载问题。

转载地址:http://bhcfk.baihongyu.com/

你可能感兴趣的文章
Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
查看>>
netty(1):NIO 基础之三大组件和ByteBuffer
查看>>
Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
查看>>
Netty:原理架构解析
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
Network 灰鸽宝典【目录】
查看>>
Network-Emulator Network-Emulator-Toolkit网络模拟器使用
查看>>
Networkx写入Shape文件
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
NetworkX:是否为每个节点添加超链接?
查看>>
network小学习
查看>>
Netwox网络工具使用详解
查看>>
Net与Flex入门
查看>>
Net任意String格式转换为DateTime类型
查看>>
net包之IPConn
查看>>
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net和T-sql中的日期函数操作
查看>>
Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
查看>>