Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 平台架构
  • 技术选型
  • 开发脚手架
  • UI规范
  • 开发规范
  • 代码分支管理模型
  • 需求分析与管理
  • 权限设计
  • 树形组织设计
  • 协议设计
  • 指令交互
  • OTA
  • 规则引擎
  • 数据流转
    • 背景
    • 技术选型
    • 功能设计
    • 功能实现
    • Nginx配置websocket代理
  • 报告生成与导出
  • 监控设备接入
  • 时序数据库
  • 平台监控
  • 云⛈
  • 接口设计
  • 安全传输
  • CI&CD
  • 缓存
  • 消息处理引擎
  • 性能调优🔥
  • 线上事故🔥
  • 混合式开发记录
  • 推送服务
  • 机器人通信协议
  • 数据分析
  • flink模板工程
  • 实时调度
  • 机器人模块化设计
  • STM32入门
  • 开发日志
Jorgen
2023-02-05
目录

数据流转

# 背景

当后台服务器判断出现了报警信息,需要主动推送到客户端【web、小程序】,然后客户端接收到通知之后,向服务器端进行查询

# 技术选型

Netty + webSocket + protobuf

  • Netty:作为高性能网络框架,一般将用于网络对接时框架首选
  • websocket:服务器端向客户端通信,目前浏览器方案【PC、小程序】的不二之选
  • protobuf:Google开源的传输协议,可降低传输带宽,相比使用字符串传输,也可起到数据加密的作用
  • Nginx:Nginx代理websocket长链接 (opens new window)

# 功能设计

  1. 客户端通过websocket方式连接服务器端,主动发送token进行校验。目前初步校验:当前用户是否是成功登录用户
  2. 推送执行的场景
    • 报警产生时
    • 报警状态变化【未处理】
  3. 推送对象
    • imei — group — username,获取设备报警需要推送的用户
    • client connect server,将经过校验的用户放入缓存
  4. 推送流程
    • 设备报警状态变更,判断该设备需要推送给那些用户
    • 判断通过websocket连接的用户有多少,进行推送

# 功能实现

  1. 通过设备查询该设备所属分组 groupId
  2. 判断当前系统有多少用户已经连接 username — tokenId
  3. 通过admin:user_groupIds 判断连接的用户,有多少需要推送【groupId 是否包含】

# Nginx配置websocket代理

  1. 编辑nginx.conf,在http区域内一定要添加下面配置:
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
1
2
3
4
  1. map指令的作用: 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建的变量$connection_upgrade,创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后果 $http_upgrade为空字符串的话,那值会是 close。

  2. 编辑vhosts下虚拟主机的配置文件,在location匹配配置中添加如下内容:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
1
2
3

示例如下:

upstream socket.kevin.com {
    hash $remote_addr consistent;
    server 192.168.1.168:9088;
}

 location / {
            proxy_pass http://socket.kevin.com/;
            proxy_set_header Host $host:$server_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
1
2
3
4
5
6
7
8
9
10
11
12
  1. 可能会出现跨域问题,server区块填写以下跨域配置即可
 add_header Access-Control-Allow-Origin *;
 add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
 add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
 if ($request_method = 'OPTIONS') {        return 204;    }
1
2
3
4
#ws#第三方平台#微信
上次更新: 2023/03/25, 13:26:36
规则引擎
报告生成与导出

← 规则引擎 报告生成与导出→

最近更新
01
STM32入门
03-09
02
ADB调试
03-09
03
微信小程序学习记录
02-09
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式