实时更新UI界面

1.处理实时通信,几种方案

1:当一个用户发送一条需要实时更新的信息,我可以直接查找在线用户,通过在线用户来进行判断条件,发送更新请求

2:用户在一个需要实时更新的界面时,就不断的向服务端发送请求,然后服务端,读取数据库,返回对应的信息,然后客户端对其界面进行更新,这里发送请求的的时间间隔比较不好掌握,

3:用户在一个需要实时更新的界面时,就像服务端发送一个请求,服务端接受到请求,并不做任何处理,当某个变量变化时,服务端,返回一个更新信息,当然,这需要一个线程(监听一个变量是否改变)。

总结:其实三种方案都差不多,第二种,第三种,就收发请求没有那末频繁,但是第三种一直监听一个变量是否变化
而第一种和第三种,其实也类似的,只不过的是,第一种在服务端直接把更新请求发给了客户端,然后由客户端来判断
客户是否在这个界面,这个界面是否需要更新,第三就是判断需要更新的才发请求。这个请求在服务端种监听一个变量,
这个变量的更改又是由其它用户更新信息所造成,所以其实三种都差不多。

 比如学习通服务端处理签到,要实时更新

                        MySignIn mySignIn = (MySignIn) requestMessage.getData();mySignIn.setId(MySignInDAO.addMySignIn(mySignIn));//得到班级的idint myClassId = mySignIn.getMyClass_id();//首先更新用户自己的ui界面Message responseMessage = new Message();responseMessage.setData(mySignIn);responseMessage.setMessageType(MessageType.tea_send_sign_in_success);SocketUtil.getSocketUtil().sendMessage(socket, responseMessage);//循环,进行更新在线用户的界面// 获取每个键对应的值for (Integer userId : onlineUsers.keySet()) {Student student1 = StudentDAO.queryStudent(userId);if (student1 != null) {//找到该用户,学生信息,//判断学生是否是在班级里if(MyClass_addtion_studentDAO.queryMyclass(student1.getId(),myClassId)){//该学生在班级里,可以进行操作// 进行更新界面Socket userSocket = onlineUsers.get(userId);Message responseMessage2 = new Message();responseMessage2.setData(mySignIn);//默认没有进行签到mySignIn.setIsSignIn(1);responseMessage2.setMessageType(MessageType.stu_need_update_sign_in);//客户端获取到签到信息,应该要判断是否在班级界面,在班级界面是否是需要更新的对应班级SocketUtil.getSocketUtil().sendMessage(userSocket, responseMessage2);}else{//学生不在班级里continue;}}else{//说明在线用户不是学生,continue;}//进行查询所有的关系;是否在这个班级里,然后返回服务端,如果服务端的Controller为空,就不更新}

 通过服务端发送信息,进行处理是否需要更新ui界面。这里使用的第一种方法

2.时间类型,对应数据库datebase

 签到的发起和结束时间:类型,

private LocalDateTime start_time;
private LocalDateTime end_time;
 public static List<MySignIn> queryMySignInList(int ClassId){Connection connection = null;PreparedStatement preparedStatement =null;ResultSet resultSet = null;List<MySignIn> mySignInList = new ArrayList<>();try {//获取数据库连接connection = JDBCUtil.getJdbcUtil().getConnection();//准备数据库语句String sql = "select * from signs where sign_class_id = ? ";preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,ClassId);resultSet = preparedStatement.executeQuery();while(resultSet.next()) {MySignIn mySignIn = new MySignIn();mySignIn.setId(resultSet.getInt(1));mySignIn.setMyClass_id(resultSet.getInt(2));mySignIn.setSignIn_code(resultSet.getString(3));mySignIn.setStart_time((LocalDateTime) resultSet.getObject(4));mySignIn.setEnd_time((LocalDateTime) resultSet.getObject(5));mySignInList.add(mySignIn);}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtil.getJdbcUtil().closeConnection(resultSet,preparedStatement,connection);}return mySignInList;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】Activity与Fragment的数据传递

上一篇文章学到了碎片的创建与生命周期&#xff0c;接下来学习碎片的常用操作&#xff0c;其中会用到上一篇文章的三个碎片&#xff0c;就做一个简单的说明吧&#xff1a;LeftFragment&#xff08;包含一个按钮&#xff09;、RightFragment4&#xff08;以粉色为背景的文本&…

408专业课130|零基础五个月速成攻略

计算机考研&#xff0c;有两个选择&#xff0c;一个是自命题&#xff0c;一个是408。如果你只是考一个普通院校&#xff0c;可以选择考自命题院校&#xff0c;容易上岸&#xff0c;但是如果考985/211/这类院校&#xff0c;最好还是选择408&#xff0c;因为408的考风险能力很强&…

Apollo部署与简易架构梳理

文章目录 apollo 安装apollo的基本架构组件机制component编译与加载 节点通讯数据的传输消息读写的实现消息的写端消息读端 常用术语ComponentChannelTaskNodeReader/WriterService/ClientParameter服务发现CRoutineSchedulerMessageDag文件Launch文件Record文件Mainboard Moni…

在图神经网络(GNN)上进行关系推理的新架构

开发能够学习推理的模型是一个众所周知的具有挑战性的问题&#xff0c;在这个领域中&#xff0c;使用图神经网络&#xff08;GNNs&#xff09;似乎是一个自然的选择。然而&#xff0c;以往关于使用GNNs进行推理的工作表明&#xff0c;当这些模型面对需要比训练时更长推理链的测…

JS代码混淆

JavaScript Obfuscator是JavaScript的功能强大的免费混淆器&#xff0c;其中包含多种功能&#xff0c;可为您的源代码提供保护&#xff0c;它支持很多流行的前端打包工具&#xff0c;如Webpack、Gulp、Grunt等都有相应的插件。 主要特征&#xff1a; ∙变量重命名 ∙字符串提…

(leetcode学习)236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的祖…

有一个动态数组a,约束如下:a的元素在5-10之间;a.sum小于100。 问:为什么随机出来的a绝对值都很大?如何解决这一问题?

题目 有一个动态数组a&#xff0c;约束如下&#xff1a;a的元素在5-10之间&#xff1b;a.sum小于100。 问&#xff1a;为什么随机出来的a绝对值都很大&#xff1f;如何解决这一问题&#xff1f; … int a[]; constraint c1{ a.size() inside [5:10]; a.sum() inside [0:100…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

linux禁用root

linux禁用root 1. 禁止普通用户切换到root1.1 sudo -i和sudo -s的区别1.2 sudo -i和直接登录root账号的区别1.3 禁止sudo -i切换root1.4 禁止su - root切换root 2. 禁止root远程登录2.1 ssh禁止root登录2.2 禁止远程桌面登录 本文主要介绍&#xff1a; 如何禁止普通用户切换到r…

Java---后端事务管理

代码世界聚眸光&#xff0c;昼夜敲盘思绪长。 算法心间精构建&#xff0c;编程路上细思量。 屏前架构乾坤定&#xff0c;键上飞驰智慧扬。 默默耕耘成果现&#xff0c;创新科技铸辉煌。 目录 一&#xff0c;概念 二&#xff0c;Spring事务管理 三&#xff0c;rollbackFor事务回…

智能合约中最常见的11种函数

下面列出了一些常见的智能合约函数及其用途&#xff0c;并提供了一些基本的示例。 1. 构造函数 (constructor) 构造函数用于初始化智能合约的状态变量。它只在合约部署时被调用一次。 示例: contract MyContract {address public owner;constructor() {owner msg.sender;}…

运维锅总浅析Kubernetes之Ceph

Ceph 的核心组件有哪些&#xff1f;Ceph读写数据流程及故障自愈是怎样的&#xff1f;如何对Ceph部署架构进行调优&#xff1f;如何用Ceph集成到kubernetes&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、Ceph简介 Ceph 是一个开源的分布式存储系统&#xff0c;旨在…

sqlalchemy打印query的SQL和参数

sqlalchemy打印query的SQL和参数 在使用 SQLAlchemy 时,可以通过几种方式来打印生成的 SQL 查询和参数。这对于调试和理解程序生成的实际数据库查询非常有用。以下是一些方法: 1. 使用 str(query) 可以直接使用 str(query) 方法来获取 SQLAlchemy 查询对象生成的 SQL 语句…

PySide(PyQt)使用QPropertyAnimation制作动态界面

主脚本&#xff1a; # encoding: utf-8 import os import sysfrom PySide6.QtCore import QPropertyAnimation, QEasingCurvefrom UIS import *# 主画面类 class MainWindow(QMainWindow, animationButton_ui.Ui_MainWindow):def __init__(self):super().__init__()self.setup…

韩顺平0基础学Java——第37天

p736-758 MySQL三层结构 1.所谓安装Mysql数据库&#xff0c;就是在主机安装一个数据库管理系统(DBMS)&#xff0c;这个管理程序可以管理多个数据库。DBMS(database manage system) 2.一个数据库中可以创建多个表,以保存数据(信息)。 3.数据库管理系统(DBMS)、数据库和表的关系…

Android 性能之刷新率设置和管理

目录 1. 刷新率和帧率 2. 多种刷新率 3. 基本原理 3.1 屏幕 & 显示控制器 3.2 Composer Service 4. Framework 策略 4.1基本架构 4.2 刷新率设置项的定义 4.2.1 最低刷新率 4.2.2 默认刷新率 & 默认的用户设置刷新率 4.2.2.1 设置入口 4.2.2.2 设置场景 4…

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的&#xff0c;所谓文档是一种类似于json的结构。 官网教程&#xff1a;https://www.mongodb.com/docs/manual/ 2 安装部…

【接口自动化_11课_框架实战:基于封装的框架进行实战演练-下】

目标&#xff1a; 在原有基础上进行框架优化&#xff0c;本内容不做强制要求&#xff0c;了解即可。 1. Faker&#xff08;伪造器&#xff09;模块生成数据 2. 实战&#xff1a;结合框架动态生成请求数据 3. 实战&#xff1a;响应进行动态断言处理 一、 Faker&#xff…

LoFTR关键点特征匹配算法环境构建与图像匹配测试Demo

0&#xff0c;LoFTR CVPR 2021论文《LoFTR: Detector-Free Local Feature Matching with Transformers》开源代码 1&#xff0c;项目主页 LoFTR: Detector-Free Local Feature Matching with Transformers 2&#xff0c;GItHub主页 GitHub - zju3dv/LoFTR: Code for "…

微软蓝屏事件对企业数字化转型有什么影响?

引言&#xff1a;从北京时间2024年7月19日&#xff08;周五&#xff09;下午2点多开始&#xff0c;全球大量Windows用户出现电脑崩溃、蓝屏死机、无法重启等情况。事发后&#xff0c;网络安全公司CrowdStrike称&#xff0c;收到大量关于Windows电脑出现蓝屏报告&#xff0c;公司…