app离线消息推送服务器,在线消息推送和离线消息推送(3)

2023-11-17

首先介绍一下具体的功能设计。

整个系统由服务端、客户端组成。客户端包含前端(浏览器端、pyqt桌面端)和后台(用于添加要推送的消息)。

因为浏览器端不容易注意到实时提醒,所以我将实时提醒功能放到pyqt桌面端中实现(如托盘区闪烁等醒目的方式)。

浏览器端中只对消息进行拉取操作(刷新网页时),而不采取实时推的方式。

pyqt桌面端主要接收新消息提示即可,通知用户到网页端查看最新消息。(登录时主动拉取一次消息判断有无新消息,或者服务器主动推送所有新消息)

实时推送消息和主动拉取消息两个功能实际上是完全分离的,可以独立行使各自的职能。

不过下面我就不写浏览器端的代码了, 直接把相关的逻辑也放到pyqt里实现。

然后再来讲一下拉取服务端消息的逻辑。

每个用户拥有自己的消息库。当消息库为空时,一次性拉取服务端所有消息入用户库;当消息库内有消息时,每次拉取只拉取用户库内最新的消息发布时间之后的消息(将未入用户库的消息入库后再从用户库拉取)。

代码共5部分

1.鉴权服务器:用于服务和服务之间对用户提供的token做权限检查

2.消息数据服务器:用于读取和处理用户消息在数据库中的状态。

3.消息在线推送服务器:将管理员发布的消息在线实时推送给所有在线用户(若使用发布器的在线推送功能)

4.管理员消息发布器:分为在线推送和离线入库两个功能,可独立或组合使用。在线推送消息不会入消息库。

5.用户消息监听器:登陆后可接收管理员推送的在线消息,也可主动拉取用户对应消息库中的所有已读、未读消息,并标记消息的已读、未读状态。

下面是代码部分(为了简化代码逻辑,后面代码中的token即用户名。)

1.鉴权服务器

from flask import Flask, request, jsonify

app = Flask(__name__)

class Lib:

@staticmethod

def auth_admin_token(token):

return True

@staticmethod

def auth_user_token(token):

return True

@app.route('/admin', methods = ['POST'])

def admin_auth_token():

data = request.json

if Lib.auth_admin_token(data['token']):

return jsonify({'code': 200, 'msg': '鉴权成功'})

return jsonify({'code': 400, 'msg': '鉴权失败'})

@app.route('/user', methods = ['POST'])

def user_auth_token():

data = request.json

if Lib.auth_user_token(data['token']):

return jsonify({'code': 200, 'msg': '鉴权成功'})

return jsonify({'code':400, 'msg': '鉴权失败'})

if __name__ == '__main__':

app.run(host = '0.0.0.0', port = 5009)

2.消息数据服务器

# coding : utf-8

# author : ['Wang Suyin', ]

# data : 2020/2/21 14:14

# software : PyCharm

# python_version : '3.5.3 64bit'

# file : 2.消息数据服务器.py

"""

说明文档:

"""

import datetime

import requests

import json

from flask import Flask,request,jsonify

app=Flask(__name__)

# 虚拟数据

db = {

'message_table': [

{'id': 1, 'message': '消息1', 'publish_time': (2020, 1, 20, 3, 4, 5)},

{'id': 2, 'message': '消息2', 'publish_time': (2020, 1, 20, 3, 4, 6)},

{'id': 3, 'message': '消息3', 'publish_time': (2020, 1, 20, 3, 4, 7)},

],

'user_to_messages_table': [

{'username': 'tester', 'message_id': 1, 'read': True},

{'username': 'tester', 'message_id': 2, 'read': False},

],

}

class Utils:

@staticmethod

def auth_admin_token(token):

data = {'token': token}

r = requests.post(url = 'http://127.0.0.1:5009/admin', json = data)

r = json.loads(r.te

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

app离线消息推送服务器,在线消息推送和离线消息推送(3) 的相关文章

  • 项目失败的思考

    1 鲁莽的追求新的开发框架 2 没有让组员提前学习必要的知识 3 低估项目难度 没有想到潜在的需求和技术难点 4 项目没有时间性的计划 5 任务没有很好的分割 1 项目争取阶段 做好demo 2 项目准备阶段 选择开发框架 让组员了解相关知
  • 【Python】快速处理:ModuleNotFoundError: No module named 'pygame'

    一 问题 在安装Python3 7之后 再安装Pygame却不能导入该包 报错如下 ModuleNotFoundError No module named pygame 尝试了好多方法 都不行 最后找到解决办法了 主要原因是安装的版本或者路
  • RabbitMq 报错An unexpected connection driver error occured ....Socket Closed

    An unexpected connection driver error occured java net SocketException Socket Closed at java net SocketInputStream socke
  • 自动zksync刷账户交互(附代码)

    自动化任务的 Python 代码 它使用 Selenium 库来控制浏览器 解锁小狐狸 task unlock metamask ads zk主网连接钱包 初始化 ZK主网任务1 转账 print 选择ZK主网任务1 转账 task zk
  • 微信到 Obsidian 2.0

    注意 新项目已发布 Obsidian 从本地到云端 obcsapi v3 0 下面文章属于 2 0 版本 新项目是 3 0 版本 请读者根据自身实际情况酌情选择 本文原文 https www ftls xyz posts wechat2s3
  • 基于改进YOLOv7和CRNN的管道裂缝检测系统(源码&教程)

    1 研究背景 随着现代城市的发展 城市规模不断扩大 居民越来越多 早期深埋于城市地下的排水管道己不堪重负 越来越引起人们的广泛关注 目前在工程应用领域 排水管道缺陷主要靠人工的肉眼识别 费时费力 主观误差大 因此开展排水管道缺陷智能识别研究
  • 常用运放电路分析

    1 运算放大器电路分析方法 由于运放的电压放大倍数很大 一般通用型运算放大器的开环电压放大倍数都在80 dB以上 而运放的输出电压是有限的 一般在 10 V 14 V 因此运放的差模输入电压不足1 mV 两输入端近似等电位 相当于 短路 开
  • 亚马逊云科技云技能学习

    文章目录 前言 一 云技能学习的优势 二 云技能学习的学习路径 三 云技能学习的未来前景 总结 前言 亚马逊云科技 Amazon Web Services AWS 作为全球领先的云计算服务提供商 提供了众多创新的云技术解决方案 在这些方案中
  • [转载]一分钟讲明白区块链数据不可篡改和51%攻击原理

    转载 一分钟讲明白区块链数据不可篡改和51 攻击原理 如果你回家过年需要向亲戚朋友讲区块链 这篇文章能让你一分钟讲明白区块链最大的优点 数据不可篡改 图片发自简书App 第1章 不可篡改的数据库其实并不新鲜 我们都有微信群 微信群的聊天记录
  • Swing组件中面板(JPanel)的使用

    JPanel组件定义面板实际上是一种容器组件 用来容纳各种其他轻量级组件 此外 用户还可以用这种面板容器绘制图形 JPanel的构造方法如下 JPanel 创建具有双缓冲和流布局 FlowLayout 的面板 JPanel LayoutMa
  • SadTalker 让图片说话

    参考 https github com OpenTalker SadTalker 其他类似参考 https www d id com 输入图片加音频产生2d视频 安装使用 1 拉取github 下载对应安装库 2 下载对应模型baidu网盘
  • Windows如何开机自动全屏打开chrome浏览器

    创建一个bat文件 C Program Files Google Chrome Application chrome exe explicitly allowed ports 10080 18080 start fullscreen url
  • 【嵌入式】用STM32F103c8t6芯片完成对SD卡的数据读写

    目录 一 SD卡协议 1 SD卡的体系架构 2 SD卡寄存器列表 3 SD卡初始化 SPI模式 4 SD卡读写 SPI模式 二 STM32CubeMX 三 Keil代码修改 四 电路连接 五 烧录运行结果 六 心得体会 七 参考链接 一 S
  • Linux tcpdump抓包命令

    1 tcpdump抓包命令 c 指定抓取包的数量 即最后显示的数量 i 指定tcpdump监听的端口 未指定 选择系统中最小的以配置端口 i any 监听所有网络端口 i lo 监听lookback接口 nn 对监听地址以数字方式呈现 且对
  • 新版TCGA的突变数据SNP下载和整理

    关于TCGAbiolinks包的学习前面一共介绍了5篇推文 今天继续学习如何使用TCGAbiolinks下载和整理MAF格式的突变数据 之前的TCGA的MAF文件是可以下载的 每个癌症包含4种软件得到的突变文件 后来就改版了 不让你随便下载
  • 网络篇 OSPF的路由器类型-42

    OSPF路由器类型 在OSPF初篇的时候 就说到了OSPF是一种比EIGRP协议更加复杂的大型网络配置协议 它的路由器类型也分为了好几种 现在我们通过下图来了解一个OSPF路由器类型 1 内部路由器 所有的接口都接入到同一个区域中的路由器
  • 自定义类型——结构体、枚举、联合

    一 结构体 我们知道 数组是将相同类型的元素放在一起 类似于数组 结构体是将相同或不同的元素放在一起 eg struct example example是结构体名 可以省略 但不建议省略 内部的是结构体成员 int a char c flo
  • 冲量在线创始人刘尧:以信创软硬件结合场景为突破口“占山为王”

    数据大爆炸的时代 发展信创 保证数据的安全与流通便成为刻不容缓的议题 专注于数据智能互联解决方案的科技创新企业冲量在线 致力于促进数据生产要素在社会间的互联互通 构建可信 安全 隐私 公平 高效的 数据互链网 作为隐私计算结合信创的先行者
  • php简单密码验证txt,php用户名和密码的简单验证

    5 php页面提交form表单 username password 5 1 php页面接收form表单 并进行处理 设置用户名和密码 arr user array user pwd arr pwd array user gt 1111 pw

随机推荐

  • React 生命周期

    React 类组件的生命周期 就是组件从创建到消耗的过程 只有类组件才有生命周期 分为 挂载阶段 更新阶段 卸载阶段 挂载阶段 钩子函数 constructor 创建组件时 最先执行 作用 初始化 state 创建 Ref 使用 bind
  • 单机版kubernetes

    Kubernetes 集群的搭建是有一定难度的 官方安装推荐了MiniKube作为单机调试 学习 1 centos安装 1 1 先决条件 安装VirtualBox KVM Note Minikube 也支持 vm driver none 选
  • 【leecode】小练习(简单8题)

    def twoSum nums target 给定 nums 2 7 11 15 target 9 因为 nums 0 nums 1 2 7 9 所以返回 0 1 type nums List int type target int rty
  • nfs漏洞的处理:目标主机showmount -e信息泄露(CVE-1999-0554)

    文章目录 前言 一 漏洞内容 二 配置现状 1 nfs server节点 etc exports文件的配置 2 client节点执行showmount e 测试 三 nfs server节点增加访问控制的配置 1 etc hosts all
  • Node.js中Redirect拼接参数方法,带参数重定向

    一 在Node js里req redirect 里拼接URL是这样的 client1 req query client client1是你获取到的需要拼接的变量 res redirect allNode client client1 注意冒
  • openstack实战之使用sysprep工具封装windows7镜像

    openstack实战之使用sysprep工具封装windows7镜像 在openstack云平台环境下 使用sysprep封装windows7系统主要目的是清理虚拟机的SID 避免使用同一windows7镜像克隆出的虚拟机出现相同的SID
  • hive数据表去重方法

    1 hive 0 8 0数据表去重方法 问题描述 hive的外部表test中 在若干字段上存在重复现象 现在需要将若干字段上值相同的多条记录 只保其中留一条 舍弃其余的 解决思路 1 group by的方法 首先新建与test表完全相同的新
  • 单点登录的解析和代码实现

    单点登录 系统简介 Http协议 web应用采用browser server架构 http作为通信协议 http是无状态协议 浏览器的每一次请求 服务器会独立处理 不与之前或之后的请求产生关联 这个过程用下图说明 三次请求 响应对之间没有任
  • 生成图片验证码的两种实现方式

    最近工作中 需求让新加一个图片验证码功能 其实这个功能之前自己写过 想必跟大家现在心里想到的实现方式一样 要么是通过servlet实现请求操作 要么是通过get请求实现操作 然后在后台通过session存储图片上的字符串 和之后前台请求过来
  • 什么是测试开发工程师?

    什么是测试开发工程师 测试开发工程师 Software Development Engineer in Test 简称SDET 是指那些既可以称作是开发人员 同时也负责软件开发阶段和测试周期的测试工作的技术人员 一个专业的SDET更关注软件
  • Matlab模拟仿真模糊PID(Fuzzy)

    研究项目 模糊PID Fuzzy 的仿真测试 研究内容 本篇文章主要研究如何通过matlab软件实现模糊PID Fuzzy 的仿真测试 研究材料 matlab 2017a软件 基本概念和定义 模糊量 如E EC 论域 上下限 240 240
  • Numpy中的argsort函数详解

    Numpy中的argsort函数返回的是每个元素的排序序号 但是不是很容易理解 gt gt gt dd mat 4 5 1 gt gt gt dd argsort matrix 2 0 1 一开始的时候想不明白为什么是2 0 1而不是1 2
  • 链表作业 3:多项式加法

    题目描述 实现两个一元n次多项式的加法 例如P A x 3x2 5x5 7 P B 2x2 6x3 x5 4x6 求P A P B 输入 每行是两个用空格隔开的整数m n 分别代表多项式的系数和指数 以输入0 0作为结尾 输出 每次完成一个
  • vue elementUI 日期组件 默认当前月份第一天 与 当前月份最后一天

    1 template中如下代码
  • (java)宠物商店,接口实现

    基本思想 使用一个接口作为宠物商店的标准 只要满足接口内的方法都可以实现接口进入宠物商店 本例子用yellVoice 方法作为标准 整体代码 import java util Scanner 导入Sacnner类 interface Pet
  • 画出有3个节点的树和有3个结点的二叉树的所有不同的形态

    画的难看了点
  • 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26

    目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q5a ece241 2014 q5b 2
  • Data->Iopb->Parameters.Create.Options & FILE_DIRECTORY_FILE 判断是否为路径

    如何在minifilter 判断操作的文件对象是目录还是文件呢 有很多人发现答案是 Data gt Iopb gt Parameters Create Options FILE DIRECTORY FILE 是否成立 不过也有很多人发现 上
  • centos7 nginx 配置 ssl证书

    安装nginx 从阿里云服务器下载 nginx版本的ssl证书 防止再 etc nginx ssl 下 停止 nginx 服务 systemctl stop nginx 修改配置文件 etc nginx conf d root izm5ej
  • app离线消息推送服务器,在线消息推送和离线消息推送(3)

    首先介绍一下具体的功能设计 整个系统由服务端 客户端组成 客户端包含前端 浏览器端 pyqt桌面端 和后台 用于添加要推送的消息 因为浏览器端不容易注意到实时提醒 所以我将实时提醒功能放到pyqt桌面端中实现 如托盘区闪烁等醒目的方式 浏览