Grails 中使用 grails-events-push 實現 ajax/comet/websocket 訊息推送

來源:互聯網
上載者:User
> 瀏覽器端的推送技術已經很成熟了,這裡使用grails events push外掛程式實現。
>
> events push基於 http://grailsrocks.github.com/grails-platform-core/guide/ 與 https://github.com/Atmosphere/atmosphere 的外掛程式,也算是 grails-platform-core 的一個擴充。
> 這裡使用events push的樣本並對它進行一些補遺。

## 首先建立一個grails項目。

## 安裝外掛程式 events-push ,這裡使用 1.0.M7版本

## 修改 BuildConfig.grooy
在 repositories 中加入atmosphere-runtime的mvn倉庫

repositories {
...
mavenRepo "http://mvn.atns.de/repository/internal/"
...
}

### 在 plugins 中加入

plugins {
...
complie "'org.atmosphere:atmosphere-runtime:1.1.0-SNAPSHOT'"
compile ":events-push:1.0.M7"
...
}

### events-push.1.0.M7引用的是atmosphere-runtime:1.1.0-SNAPSHOT。

## 在 config 目錄建立 MyEvents.groovy

events = {
//瀏覽器要接受名為"msgFromServer"這個通知
'msgFromServer' namespace: 'browser', browser:true, browserFilter: { data, request ->
println "browserFilter after Service"
println " browserFilter data: $data"
return false
}

//瀏覽器發送這個名為msgToServer的通知
'msgToServer' namespace: 'browser', browser:true, filter: { println "msgToServer Filter"; return true}
}

### 上面代碼中
##### 'msgToServer' 訊息的標籤,訊息名
##### namespace 訊息的分組,組名
##### browser 是否允許瀏覽器接受這個訊息,grails-platform-core 外掛程式主要用於伺服器中事件的推送,events push將它與atmosphere整合了起來,所以就有了這個參數
##### filter 訪問過濾器閉包,相當與config中xxfilters.groovy,通常做一些許可權檢查什麼的。使用atmosphere後,ajax/comet的訪問不會經過xxxfilters.groovy,需要在這裡做判斷,當然同filters一樣寫好閉包就行了,傳回值決定是否攔截瀏覽器過來的訊息給伺服器。
##### browserFilter 在service處理玩瀏覽器推送的訊息後,緊接著會執行這裡,他接受兩個參數,data:service中event()方法發送的訊息內容,request:servlet request。同filters一樣,傳回值決定是否攔截伺服器的訊息給瀏覽器

## 建立一個Service 名為MyService.groovy

//Listener註解指明這個方法接受那種訊息,namespace不填的話接受所有訊息,這裡接受名為browser分組的訊息
//注意,方法名必須是MyEvents.groovy中定義的標籤名
@Listener(namespace='browser') def msgToServer(Map data) {
println "msg from browser msg:$data"
println "service send 'msgFromServer' msg"
//發送"msgFromServer"事件
event('msgFromServer', [msg: "!this is msg!"], [namespace: 'browser'])
}

## 自己更改某個gsp,添加event push的監聽器與訊息發送器

html:

### grails.Events中接受的transport參數,是atmosphere所支援的,基本上包含了各種ajax/comet/websocket協議。
### 具體支援 polling, long-polling, streaming, jsonp, sse, websocket

## 整個處理流程,println輸出的結果:

##### 1、msgToServer Filter >> MyEvents.groovy msgToServer標籤的filter過濾器
##### 2、msg from browser msg:[msg: msg from browser] >> MyService.groovy msgToServer方法
##### 3、service send 'msgFromServer' msg >> MyService.groovy msgToServer方法
##### 4、browserFilter after Service >> MyEvents.groovy msgToServer標籤的browserFilter過濾器
##### 5、browserFilter data: [msg:!this is msg!] >> MyEvents.groovy msgToServer標籤的browserFilter過濾器

***
## 參考:
##### 伺服器反響推送技術 ajax/comet等,ibm的系列文章 http://www.ibm.com/developerworks/cn/views/web/libraryview.jsp?view_by=search&sort_by=Date&sort_order=desc&view_by=Search&search_by=%E5%8F%8D%E5%90%91+Ajax+%E9%83%A8%E5%88%86&dwsearch.x=14&dwsearch.y=15
##### Using Browser Push in Grails http://java.dzone.com/articles/using-browser-push-grails
##### grails-atmosphere-plugin架構 https://bitbucket.org/bgoetzmann/grails-atmosphere-plugin/wiki/Home
##### jQuery.atmosphere.js API https://github.com/Atmosphere/atmosphere/wiki/jQuery.atmosphere.js-API
##### grails-events-push https://github.com/smaldini/grails-events-push
##### Grails Plugin Platform http://grailsrocks.github.com/grails-platform-core/guide/

### ps: 讀goovy語言的源碼太痛苦了,文檔少是其一,又揉和了太多語言的特性。。。。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.