当前位置: 首页 > news >正文

实时更新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;}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++初阶】string类
  • 基于深度学习的医学影像分类
  • Vbox虚拟机+Ubuntu motest测试drm
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • Django transaction.atomic()事务处理
  • 【ROS2】高级:安全-理解安全密钥库
  • 《梦醒蝶飞:释放Excel函数与公式的力量》18.1 图表类型与设计
  • 机器学习(二十):偏差和方差问题
  • Docker Desktop安装
  • 汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动
  • PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能
  • vue2获取视频时长
  • Docker-Compose实现MySQL之主从复制
  • 理想化相机模型的相机内参
  • 医学图像分类
  • “大数据应用场景”之隔壁老王(连载四)
  • Angular数据绑定机制
  • CentOS7 安装JDK
  • CentOS7简单部署NFS
  • Hexo+码云+git快速搭建免费的静态Blog
  • leetcode98. Validate Binary Search Tree
  • Linux中的硬链接与软链接
  • magento 货币换算
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Vue实战(四)登录/注册页的实现
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记录:CentOS7.2配置LNMP环境记录
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 详解NodeJs流之一
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​Redis 实现计数器和限速器的
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #define
  • #nginx配置案例
  • (2022 CVPR) Unbiased Teacher v2
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (四) Graphivz 颜色选择
  • (一)80c52学习之旅-起始篇
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *2 echo、printf、mkdir命令的应用
  • .NET : 在VS2008中计算代码度量值
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net Memory Profiler的使用举例
  • .NET/C# 使用反射注册事件
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET成年了,然后呢?
  • .NET学习全景图
  • .sdf和.msp文件读取