作业自动提示功能设计思路

1、利用现在FLEX项目中的心跳包机制,使用SOCKET心跳包技术获取最新的作业情况。

2、在现在FLEX项目中有一个:

核心代码:

 

这样我们可以利用这个通道,获取相应的信息。

 

具体修改步骤如下:

1、准备工作

创建一张表,名称:t_bag_sendmessage

字段包括:

id int

receiver_id char(36) --接收的人员

create_time datetime --发送的时间

type_id     int --信息的分类,比如是教师发作业:1 是学生提交作业:2

message_body varchar(4000) --消息体,内容,是一个JSON串

have_receive int --是不是用户已收到,1表示接到,0表示是未收到,默认是0

之所以有这张表,是用来将提示信息持久化使用的,下面将重点说明。

 

2、我们在JAVA项目中,接收到FLEX端通过心跳传上来的心跳包,解析JSON串,得到是哪个身份(教师,学生),哪个人员(用户ID),哪种设备(TEACH平台还是PAD),

以前我们是直接把这个人员ID和PAD设备ID保存到MEMCACHED中,并设置了过期时间为5秒(约值,不准确),现在我们除了做这件事以后,扩展一下,再做另一部分工作:

HomeWork+Teacher+用户ID (表示是作业,并且接收者是教师)或者

HomeWork+Student+用户ID(表示是作业,并且接收者是学生)

 

为KEY值,到MEMCACHED中去查找是否有需要提示的字符串(也是一个JSON串,可以包括各种信息,具体形式请开发人员自行扩展) 如果没有,返回OK,如果有,返回此字符串,并在MEMCACHED删除此键值,防止下次再次获取到重复的提示信息。

3、教师留作业

查询他所教授的任课计划,得到任课班级,获取到所有教授的学生,然后循环向上面提到的数据表中插入数据,并组成JSON中,向MEMCACHED中插入数据,表示这个人,需要提示这个信息。

插入的键值:

HomeWork+Teacher+用户ID (表示是作业,并且接收者是教师)或者

HomeWork+Student+用户ID(表示是作业,并且接收者是学生)

 

4、学生提交作业

JAVA端负责保存时,也要查询到这科作业需要向哪位教师提示,获取到教师的ID,向上面提到的数据表中插入数据,并向MEMCACHED中插入一条以HomeWork+用户ID为KEY值的字符串,提示教师,哪个学生上交了作业。

 

5、后期扩展

现在我们准备的这张数据表,完全 没有使用上,就是说现在是没用的,为什么我们要创建这样一张表呢?主要是防止如果MEMCACHED服务器重启了,再进来时,就没有了消息,而用户还没有消费到这个消息 的时候,会有消息 丢失,我们把数据保存到表中,如果一旦出现了这类问题,我们可以设计在TOMCAT启动时,使用一个SERVLET将数据表中没有被消费掉的记录再次放到MEMCACHED中。

 

6、为什么我们不使用ACTIVEMQ?而是重复创建轮子呢?

原因:1、我们现在系统中有心跳包的机制,而BLAZEDS的推机制从本质上讲也使用了轮询技术,但因没有使用NIO,所以并发量限制在100,不及商业软件LCDS的并发量1000,也就是说我们现在手里就有一把手术刀,没必要再为了去切一个东西再去买一把卷笔刀。贴近系统底层的SOCKET协议的效率是最高的,肯定要优于封装过的其它协议。

2、处理ACTIVEMQ也需要学习成本,项目工期紧,能解决问题就是好方法。

 

 

 

转载于:https://www.cnblogs.com/littlehb/archive/2013/05/03/3055943.html

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

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

相关文章

(JAVA)Integer类之基本数据类型之间的转换

package com.book.lite;/*** author zhangyu* date 2021年08月15日 8:01 下午* Integer类,其他常用方法:* 1.parseInt(String i) 将数字格式字符串,转换成基本数据类型* 2.parseInt(String i, int radix) 将数字类型字符串转换成进制数* 3.t…

java文件读写操作大全

转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html 一.获得控制台用户输入的信息 1 public String getInputMessage() throws IOException...{2 System.out.println("请输入您的命令∶");3 byte buffer[]new byte[1024];4 …

(Java)Integer类的其他常用方法

package com.book.lite;/*** author zhangyu* date 2021年08月15日 8:01 下午* Integer类,其他常用方法:* 1.parseInt(String i) 将数字格式字符串,转换成基本数据类型* 2.parseInt(String i, int radix) 将数字类型字符串转换成进制数* 3.t…

libev源码分析--常用的watcher

在上一篇文章里,我们分析了libev整体设计思想和主循环的工作原理,也提到了watcher是衔接开发者代码的主要入口。watcher与开发者最接近,也与具体事件处理逻辑最接近。所以,watcher的具体实现,与性能的关系也相当密切。…

(Java)Character类

package com.book.lite;import sun.lwawt.macosx.CSystemTray;import java.util.Scanner;/*** author zhangyu* date 2021年08月16日 10:50 下午* Character类的方法* 1.判断是否小写:isLowerCase()* 2.判断是否大写:isUpperCase()* 3.判断是不是数字&am…

棋盘切割 DP POJ 1191

把方差公式先变形为 σ2 (1/n)∑xi2-xa2 xa为平均值。 由于要求标准差最小,只需方差最小,平均值都是一样的,n也是一样的,这样原问题就变为求这n快小棋盘总分的平方和最小 考虑左上角为(x1,y1),右上角为&am…

lucene,lucene.net学习教程

lucene学习教程 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 2 lucene的工作方式 lucene提供的服务实际包含两部分&#xf…

(JAVA)正则表达式

正则表达式的常见规则 1.字符类[abc]:字符必须是abc其中一个[a-z]:字符必须是小写字母[A-Z]:字符必须是大写字母[a-zA-Z]:字符必须是字母[^abc]:字符不能是abc其中一个[^a-z]:字符不能是小写字母[^a-zA-Z]:…

巧用“傍术”选择陈列点

割箱 陈列 是一种将包装纸箱割斜角,以露出商品的 陈列 方式,广泛应用在包袋食品及小百货商品。  商超内的位置很多,选择什么样的位置 陈列 产品能够起到最好的效果呢?  首先是要找视觉效果尽可能好的地方。消费者进入商场第一…

(JAVA) * 使用正则表达式,给字符串排序 * 使用数组排序

package com.book.lite;import java.util.Arrays;/*** author zhangyu* date 2021年08月19日 10:49 下午* 使用正则表达式,给字符串排序* 使用数组排序*/ public class RegexDemo1 {public static void main(String[] args) {test();}public static void test(){Str…

python 使用 pip 安装第三方库 导入不成功

本文是什么意思呢? 就是你需要使用一些库安装老师或者网上说的 通过pip 安装下载了第三方库,但是使用 import xxx from xxx import xx ,pycharm ide 导入的下面还有红色波浪线,导入不成功。 这是什么原因? 这是pyc…

LLVM每日谈之十三 使用LLVM自带的PASS

作者:snsn1984 PS:最近一段时间,投入在LLVM上的时间有些减少。差点把对它的研究断掉,今天开始继续。对LLVM的研究需要很长一段时间的坚持不懈才可以彻底搞明白。 前面已经介绍过如何写自己的PASS,并且也针对一个简单的…

(JAVA)Math类

package com.book.lite;import java.util.regex.Matcher;/*** author zhangyu* date 2021年08月19日 11:34 下午* 1.绝对值*/ public class MathDemo {public static void main(String[] args) {System.out.println(methon_1());System.out.println(methon_2());System.out.pri…

Android学习笔记-判断手机外部存储是否可读写

通过调用Environment的getExternalStorageState()方法来判断外部存储的状态: /* 查检外部存储读取与写入功能是否可用 */ public boolean isExternalStorageWritable() {String state Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {r…