999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于存儲(chǔ)過(guò)程和HTTP協(xié)議的消息主動(dòng)推送系統(tǒng)實(shí)現(xiàn)

2016-12-12 07:34:20夏凌云龔文濤
微型電腦應(yīng)用 2016年11期
關(guān)鍵詞:數(shù)據(jù)庫(kù)微信用戶(hù)

夏凌云,龔文濤

基于存儲(chǔ)過(guò)程和HTTP協(xié)議的消息主動(dòng)推送系統(tǒng)實(shí)現(xiàn)

夏凌云,龔文濤

數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程和觸發(fā)器多用于數(shù)據(jù)完整性檢測(cè)和復(fù)雜規(guī)則約束,其提供了一個(gè)當(dāng)數(shù)據(jù)表數(shù)據(jù)發(fā)生變更后的主動(dòng)操作機(jī)制,Oracle數(shù)據(jù)庫(kù)還提供了UTL_HTTP包來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)外部WEB服務(wù)器的主動(dòng)訪問(wèn)。利用這兩個(gè)特性,可以在數(shù)據(jù)發(fā)生變化的時(shí)候主動(dòng)地將變化內(nèi)容及時(shí)傳輸給外部業(yè)務(wù)服務(wù)器,再通過(guò)業(yè)務(wù)服務(wù)器發(fā)送給相應(yīng)的業(yè)務(wù)人員,以此避免外部業(yè)務(wù)系統(tǒng)主動(dòng)和頻繁讀取數(shù)據(jù)庫(kù)服務(wù)器,提高系統(tǒng)消息發(fā)送效率,降低系統(tǒng)查詢(xún)負(fù)擔(dān)。

存儲(chǔ)過(guò)程;觸發(fā)器;消息推送;Oracle;UTL_HTTP

0 引言

隨著高校信息化建設(shè)發(fā)展和個(gè)人智能終端越來(lái)越普及,移動(dòng)化學(xué)習(xí)和辦公逐漸成為趨勢(shì),需要向師生用戶(hù)的移動(dòng)終端主動(dòng)推送消息或提醒的應(yīng)用和場(chǎng)景也越來(lái)越多。在以往的使用過(guò)程中,主動(dòng)推送的消息一般采用應(yīng)用內(nèi)推送的方式,在各個(gè)業(yè)務(wù)系統(tǒng)的APP端獨(dú)立推送,以保證推送的及時(shí)性。但是隨著高校信息化建設(shè)情況的發(fā)展,這種模式也顯現(xiàn)出了一些弊端,主要是需要推送消息的 APP會(huì)越來(lái)越多,用戶(hù)安裝起來(lái)比較復(fù)雜和混亂,也不符合統(tǒng)一門(mén)戶(hù)和入口的高校信息化移動(dòng)建設(shè)要求。

現(xiàn)在很多高校比較常用的是將一些應(yīng)用和消息推送功能統(tǒng)一集成到微信公眾平臺(tái)或者QQ公眾平臺(tái)上,通過(guò)這些公共平臺(tái)進(jìn)行校園信息化功能的消息推送和用戶(hù)交互。使用這樣的第三方獨(dú)立平臺(tái)來(lái)進(jìn)行消息推送在解決了老問(wèn)題的時(shí)候又帶來(lái)了新問(wèn)題,由于校內(nèi)的信息化系統(tǒng)消息接口并不統(tǒng)一,致使第三方公共平臺(tái)的后臺(tái)服務(wù)器很多情況下不得不對(duì)各個(gè)系統(tǒng)消息接口進(jìn)行定時(shí)輪詢(xún),以確定是否有新消息和發(fā)送目標(biāo)。而每個(gè)系統(tǒng)需要推送的消息、目標(biāo)用戶(hù)往往非常多,消息也往往不是內(nèi)容完全相同的群發(fā)消息。在這種情況下對(duì)每個(gè)業(yè)務(wù)系統(tǒng)的輪詢(xún)將消耗后臺(tái)服務(wù)器和業(yè)務(wù)系統(tǒng)服務(wù)器太多的資源,給整個(gè)校園信息化系統(tǒng)帶來(lái)很大的負(fù)擔(dān)。經(jīng)過(guò)不斷探索,我們發(fā)現(xiàn)采用數(shù)據(jù)庫(kù)自帶的存儲(chǔ)過(guò)程和高級(jí)接口,并結(jié)合通用HTTP協(xié)議來(lái)實(shí)現(xiàn)消息的主動(dòng)推送,在用來(lái)替代輪詢(xún)過(guò)程和減輕系統(tǒng)負(fù)擔(dān)上有著很好的效果。

1 存儲(chǔ)過(guò)程和觸發(fā)器

存儲(chǔ)過(guò)程是一種重要的數(shù)據(jù)庫(kù)對(duì)象,一般由SQL語(yǔ)句組合而成,具有在存儲(chǔ)過(guò)程中聲明和設(shè)置的SQL變量、實(shí)現(xiàn)流程控制、處理異常,能夠?qū)?shù)據(jù)進(jìn)行更新、讀取和刪除操作并返回結(jié)果集的功能[1]。一般來(lái)說(shuō),SQL語(yǔ)句每次提交執(zhí)行一次就需要編譯一次,而存儲(chǔ)過(guò)程在創(chuàng)造時(shí)經(jīng)過(guò)一次編譯后,可以將編譯結(jié)果保存在數(shù)據(jù)庫(kù)中以便反復(fù)調(diào)用,因此具有較高的執(zhí)行效率。同時(shí),存儲(chǔ)過(guò)程還可以降低整個(gè)應(yīng)用程序的復(fù)雜性,具有可移植性、重用性、安全性和伸縮性等特性。因此,使用存儲(chǔ)過(guò)程操作數(shù)據(jù)庫(kù)可以有效地提高數(shù)據(jù)

庫(kù)應(yīng)用的實(shí)現(xiàn)效率[2]。

觸發(fā)器是一種特殊類(lèi)型的存儲(chǔ)過(guò)程,顧名思義,它是由某個(gè)數(shù)據(jù)庫(kù)事件的發(fā)生而被自動(dòng)隱式調(diào)用的一種存儲(chǔ)過(guò)程。除了在一些數(shù)據(jù)庫(kù)系統(tǒng)事件里觸發(fā)的系統(tǒng)觸發(fā)器,數(shù)據(jù)庫(kù)系統(tǒng)中最常用的是DML(Data Manipulation Language 數(shù)據(jù)操控語(yǔ)言)觸發(fā)器,在我們的消息主動(dòng)推送系統(tǒng)實(shí)現(xiàn)中采用的也是DML觸發(fā)器。觸發(fā)器主要由觸發(fā)對(duì)象、觸發(fā)事件、觸發(fā)事件和觸發(fā)頻率等等元素組成,細(xì)節(jié)如圖1所示:

圖1 觸發(fā)器組成

我們可以這樣簡(jiǎn)要地理解觸發(fā)器工作過(guò)程:在數(shù)據(jù)庫(kù)中編譯成功并保存的觸發(fā)器,會(huì)一直監(jiān)測(cè)著其設(shè)置的觸發(fā)對(duì)象(某個(gè)表、視圖或其它數(shù)據(jù)庫(kù)對(duì)象),當(dāng)在該對(duì)象上發(fā)生指定的觸發(fā)事件(數(shù)據(jù)插入、 更新、刪除或其它數(shù)據(jù)庫(kù)事務(wù))時(shí),將在該觸發(fā)事件被執(zhí)行前或執(zhí)行后(由觸發(fā)時(shí)機(jī)指定),以指定的觸發(fā)頻率(語(yǔ)句級(jí):每句SQL指令調(diào)用一次;行級(jí):每影響一行數(shù)據(jù)調(diào)用一次)來(lái)執(zhí)行觸發(fā)器中所設(shè)置的一系列指令操作。

2 系統(tǒng)總體設(shè)計(jì)

總體設(shè)計(jì)如圖2所示:

圖2 系統(tǒng)總體設(shè)計(jì)

從上所述我們可以看出,觸發(fā)器可以由一個(gè)數(shù)據(jù)庫(kù)事件啟動(dòng),在某個(gè)具體的數(shù)據(jù)庫(kù)事件發(fā)生時(shí)自動(dòng)后臺(tái)運(yùn)行。結(jié)合我們的需求,當(dāng)我們需要主動(dòng)提醒的數(shù)據(jù)每次插入到數(shù)據(jù)表中的同時(shí),我們都可以利用觸發(fā)器在數(shù)據(jù)庫(kù)中觸發(fā)一系列指定操作的運(yùn)行,現(xiàn)在的問(wèn)題就是如何使這一系列觸發(fā)操作能傳遞到數(shù)據(jù)庫(kù)外部的其它服務(wù)器中。以O(shè)racle數(shù)據(jù)庫(kù)軟件為例,其提供了 UTL_HTTP包[3],用以實(shí)現(xiàn)數(shù)據(jù)庫(kù)事務(wù)對(duì)外部WEB服務(wù)器的HTTP訪問(wèn)與互聯(lián)。

編寫(xiě)一個(gè)行觸發(fā)器監(jiān)視通知提醒數(shù)據(jù)表,當(dāng)每有一行新通知插入到該表的時(shí)候,觸發(fā)器被觸發(fā)并調(diào)用預(yù)先編譯好的存儲(chǔ)過(guò)程,使用UTL_HTTP包將具體消息發(fā)送到外部WEB服務(wù)器,外部服務(wù)器接收到消息后再對(duì)用戶(hù)進(jìn)行相應(yīng)的消息具體推送。可以看出,在如此設(shè)計(jì)思路充分利用了數(shù)據(jù)庫(kù)的觸發(fā)器機(jī)制,外部服務(wù)器再不需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行定時(shí)輪詢(xún),在大大降低了雙邊系統(tǒng)的負(fù)載的同時(shí),還消除了輪詢(xún)時(shí)間間隔,使消息推送更加的及時(shí)。

3 系統(tǒng)實(shí)現(xiàn)

在這里我們以實(shí)現(xiàn)將校園門(mén)戶(hù)中的待辦事項(xiàng)提醒推送到微信企業(yè)號(hào)的通知消息中為例,介紹整個(gè)流程的具體實(shí)現(xiàn)方法。假設(shè)所有用戶(hù)的新增待辦事項(xiàng)都被業(yè)務(wù)系統(tǒng)插入到數(shù)字校園公共數(shù)據(jù)庫(kù)用戶(hù)CORE_iUPC的TODO_INFO表中,我們需要通過(guò)行觸發(fā)器調(diào)用一段存儲(chǔ)過(guò)程,將該插入數(shù)據(jù)的具體內(nèi)容(代辦人員和待辦事項(xiàng))通過(guò)HTTP協(xié)議主動(dòng)推送到微信企業(yè)號(hào)后臺(tái)服務(wù)器。本系統(tǒng)示例中的數(shù)據(jù)庫(kù)軟件為Oracle 11g RAC,存儲(chǔ)過(guò)程和觸發(fā)器[4]采用PL/SQL編寫(xiě)[5],HTTP端代碼采用C#編寫(xiě),使用IIS7.0發(fā)布WEB服務(wù)。

3.1 觸發(fā)器設(shè)計(jì)觸發(fā)器的PL/SQL的代碼如下,具體含義見(jiàn)注釋?zhuān)?/p>

3.2 存儲(chǔ)過(guò)程設(shè)計(jì)

存儲(chǔ)過(guò)程SendNotice的代碼如下,該存儲(chǔ)過(guò)程的重點(diǎn)是在調(diào)用oracle所提供的utl_http包來(lái)訪問(wèn)HTTP服務(wù),賦予該存儲(chǔ)過(guò)程HTTP Client的角色和功能,具體含義見(jiàn)注釋?zhuān)?/p>

在這里為了簡(jiǎn)要演示UTL_HTTP的調(diào)用方法,我們使用其來(lái)調(diào)用HTTP_GET方法來(lái)向外部服務(wù)器發(fā)送信息,將相關(guān)變量組合成GET頁(yè)面的URL參數(shù)部分進(jìn)行發(fā)送,這樣的實(shí)現(xiàn)方法比較簡(jiǎn)單易懂。不過(guò)在參數(shù)較多或者參數(shù)比較復(fù)雜的情況下,利用URL傳遞參數(shù)的方法可能不太適用,我們還是推薦使用HTTP_POST方法來(lái)發(fā)送數(shù)據(jù),將所有參數(shù)打包成一個(gè)XML或者JSON格式的數(shù)據(jù),通過(guò)POST方法把數(shù)據(jù)發(fā)送到對(duì)方服務(wù)器。POST方法對(duì)所傳參數(shù)的長(zhǎng)度和格式一般沒(méi)有限制,也基本不會(huì)有特殊字符沖突處理問(wèn)題。

3.3 HTTP接收消息和對(duì)外推送

為了便于接收從數(shù)據(jù)庫(kù)推送來(lái)的消息并同時(shí)往微信企業(yè)號(hào)推送,我們直接在微信企業(yè)號(hào)的后臺(tái)創(chuàng)建了上述UTL_HTTP包所指定的接受推送頁(yè)面sendnotice.aspx,在接收到參數(shù)后調(diào)用微信企業(yè)號(hào)的后臺(tái)消息發(fā)送功能,往指定人員的微信推送相應(yīng)通知信息。后臺(tái)Web服務(wù)器由IIS7.0搭建,代碼用C#編寫(xiě),在Page_Load時(shí)運(yùn)行的有關(guān)代碼片段如下:

其中往微信企業(yè)號(hào)內(nèi)用戶(hù)發(fā)送通知消息的iUPC_Notice類(lèi)具體實(shí)現(xiàn)的是與微信企業(yè)號(hào)公眾平臺(tái)所對(duì)接的相關(guān)標(biāo)準(zhǔn)[6],具體內(nèi)容參見(jiàn)騰訊公司發(fā)布的企業(yè)號(hào)使用文檔,該文檔描述了后臺(tái)服務(wù)器與微信企業(yè)號(hào)之間的接口規(guī)范和調(diào)用流程等等細(xì)節(jié),在此不再累述。

4 Oracle 11 g相關(guān)權(quán)限和安全設(shè)置

從數(shù)據(jù)安全角度來(lái)說(shuō),在數(shù)據(jù)庫(kù)軟件中主動(dòng)調(diào)用HTTP協(xié)議訪問(wèn)外部站點(diǎn)是一個(gè)高危動(dòng)作,因此Oracle對(duì)內(nèi)部用戶(hù)是否能發(fā)起對(duì)外HTTP連接做了嚴(yán)格的限制。在以前的版本是控制某用戶(hù)對(duì) UTL相關(guān)網(wǎng)絡(luò)訪問(wèn)包(UTL_HTTP、UTL_MAIL、UTL_TCP等等)的調(diào)用權(quán)限,而在Oracle 11g版本中進(jìn)行了更高細(xì)粒度的ACL(Access Control List,訪問(wèn)控制列表)限制。在PL/SQL下配置用戶(hù)“test”訪問(wèn)某個(gè)IP地址80端口的ACL的具體方法如下:

DBMS_NETWORK_ACL_ADMIN包用于創(chuàng)建、管理、修改和刪除ACL,其中的create_acl方法用于創(chuàng)建一條ACL,如果這條 ACL還需要指定給其他用戶(hù)使用,還可以利用add_privilege 方法進(jìn)行添加用戶(hù),assign_acl方法用于對(duì)某條ACL及其用戶(hù)分配網(wǎng)絡(luò)訪問(wèn)權(quán)限,指定其可以訪問(wèn)的主機(jī)和端口,其中host變量可以是IP地址或者域名,也可以使用通配符匹配一段網(wǎng)段。同時(shí)也可以多次調(diào)用 assign_acl為同一個(gè)ACL和其所含用戶(hù)授權(quán)訪問(wèn)多個(gè)host主機(jī)和端口號(hào)。

5 總結(jié)

在本文中我們利用存儲(chǔ)過(guò)程和觸發(fā)器,在數(shù)據(jù)表發(fā)生變化時(shí)主動(dòng)調(diào)用UTL_HTTP包訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器外部的網(wǎng)站,并通過(guò)HTTP協(xié)議傳遞出相關(guān)內(nèi)容,使消息可以第一時(shí)間發(fā)送到微信客戶(hù)端,避免了輪詢(xún)過(guò)程對(duì)雙方系統(tǒng)的額外開(kāi)銷(xiāo)。該方法還是個(gè)非常適用于通過(guò) POST方法將格式數(shù)據(jù)發(fā)送到通信運(yùn)營(yíng)商所提供的短信發(fā)送接口,實(shí)現(xiàn)全自動(dòng)的短信提醒功能。除了 UTL_HTTP包外,Oracle 11g還提供了UTL_TCP、UTL_MAIL來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)外的socket連接功能和對(duì)外發(fā)送郵件功能,同樣可以實(shí)現(xiàn)本文類(lèi)似的主動(dòng)推送功能。另外Microsoft SQL Server和其它主流數(shù)據(jù)庫(kù)軟件均具有類(lèi)似的存儲(chǔ)過(guò)程、觸發(fā)器和HTTP訪問(wèn)機(jī)制,有待大家參考和利用。

[1] 馬洪江,周相兵.基于存儲(chǔ)過(guò)程的科研績(jī)效統(tǒng)計(jì)分析系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2011,21(8)181-184.

[2] 郭紹忠,甄濤,賈琦.基于存儲(chǔ)過(guò)程的海量郵件數(shù)據(jù)挖掘[J].計(jì)算機(jī)工程, 2010,36(1):40-42.

[3] Database PL/SQL Packages and Types Reference. Chapter 225 UTL_HTTP[EB/OL].[2016-03-02],http://docs.oracle. com/cd/E11882_01/appdev.112/e40758/u_http.htm#ARPL S070.

[4] 林樹(shù)澤, 盧芬, 柳冬青. Oracle DBA高可用、備份恢復(fù)與性能優(yōu)化[M].北京:清華大學(xué)出版社,2015.

[5] Michael McLaughli.Oracle Database 11g PL/SQL程序設(shè)計(jì) [M].張?jiān)疲茸g.北京:清華大學(xué)出版社,2009.

[6] 微信公眾平臺(tái)企業(yè)號(hào)接口文檔[EB/OL].[2016-03-02] http://qydev. weixin.qq.com/wiki/.

Implementation of Message Push System Based on the Stored Procedure and HTTP Protocol

Xia Lingyun, Gong Wentao
(Internet and Education Technology Center, China University of Petroleum (East China), Qingdao 266580, China)

Stored procedures and triggers in database are formerly used for data integrity checking and complex rule restriction, they also provide an actively operating mechanism when the data change in the database table. Oracle Database also provides UTL_HTTP package to achieve the access from database to external WEB server. Using these two characteristics, it can send the changing data to an external service server initiatively and promptly, and then sends the message to the appropriate user through the service server. Thereby avoiding external service systems avoid frequent reading the database server initiatively, it improves messaging system efficiency and reduces the burden on system queries

Stored procedure; Trigger; Message push; Oracle; UTL_HTTP

TP393

A

1007-757X(2016)11-0066-03

2016.07.06)

夏凌云(1980-)男,瀘州人,中國(guó)石油大學(xué)(華東),網(wǎng)絡(luò)及教育技術(shù)中心,碩士研究生,工程師,研究方向:互聯(lián)網(wǎng)技術(shù)、計(jì)算機(jī)軟

硬件技術(shù)和物聯(lián)網(wǎng)技術(shù),青島 266580

龔文濤(1984-)男,潛江人,中國(guó)石油大學(xué)(華東),網(wǎng)絡(luò)及教育技術(shù)中心,碩士,工程師,研究方向:網(wǎng)絡(luò)信息安全,青島 266580

猜你喜歡
數(shù)據(jù)庫(kù)微信用戶(hù)
微信
數(shù)據(jù)庫(kù)
關(guān)注用戶(hù)
關(guān)注用戶(hù)
數(shù)據(jù)庫(kù)
關(guān)注用戶(hù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
微信
微信
主站蜘蛛池模板: 成人免费午间影院在线观看| 精品自窥自偷在线看| 欧美另类视频一区二区三区| 久久不卡精品| 亚洲午夜福利精品无码不卡| 久无码久无码av无码| 精品综合久久久久久97超人| 亚洲成人在线免费观看| 极品国产在线| 亚洲天堂日本| 丝袜亚洲综合| 欧美日韩国产高清一区二区三区| 玖玖免费视频在线观看| 一级全黄毛片| 伊人婷婷色香五月综合缴缴情| 日本福利视频网站| 久久免费精品琪琪| 色呦呦手机在线精品| 色天堂无毒不卡| 亚洲综合二区| 久久人人妻人人爽人人卡片av| 久久久精品久久久久三级| 国产精品免费电影| 国产视频大全| 中文字幕日韩视频欧美一区| 中国毛片网| 99re热精品视频国产免费| 91免费精品国偷自产在线在线| 日韩人妻少妇一区二区| 欧美一区二区三区国产精品| 国产极品美女在线| 一级做a爰片久久毛片毛片| 午夜影院a级片| 91成人免费观看| 国产欧美另类| 伊人久久大香线蕉aⅴ色| 自慰网址在线观看| 精品一区国产精品| 六月婷婷激情综合| 欧美日韩一区二区三区在线视频| 色偷偷男人的天堂亚洲av| 一级毛片在线播放| 国产精品爆乳99久久| 黄色成年视频| 福利在线不卡一区| 亚洲女人在线| 天堂成人在线视频| 成人欧美日韩| 免费人成网站在线高清| 最新国产高清在线| a级毛片在线免费观看| 四虎国产成人免费观看| 日韩黄色大片免费看| 中文字幕亚洲综久久2021| 国产精品污污在线观看网站| 亚洲无码一区在线观看| 99精品伊人久久久大香线蕉| 成年人视频一区二区| 色悠久久综合| 91在线一9|永久视频在线| 欧美精品1区2区| 中文天堂在线视频| 婷婷色中文| AV网站中文| 99久久国产综合精品2023| 色综合天天综合中文网| 最新午夜男女福利片视频| 国产靠逼视频| 亚洲成网777777国产精品| 国产哺乳奶水91在线播放| 亚洲 日韩 激情 无码 中出| 午夜不卡福利| 毛片久久网站小视频| 综合久久五月天| 国产高清国内精品福利| 波多野结衣亚洲一区| 欧美怡红院视频一区二区三区| 欧洲免费精品视频在线| 尤物亚洲最大AV无码网站| 亚洲日韩精品欧美中文字幕| 91久久偷偷做嫩草影院| 在线观看免费国产|