作业自动提示功能设计思路
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
總結
以上是生活随笔為你收集整理的作业自动提示功能设计思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++递归算法
- 下一篇: 教你学会七种维护服务器安全最佳技巧