2014-02-16 49 views
1

我想在Grails(spring)webapp中嵌入Netty。我把所有的東西弄清楚,知道如何使用它們,唯一我不知道的是我應該使用哪一塊?嵌入式套接字監聽器的Netty/Grails web集成

Netty應用程序將嚴格用於UDP並在端口162上偵聽。這是否意味着我應該將其設置爲servlet?自從它嵌入到webapp中以後,它會是一個HTTP servlet嗎?還是應該將其配置爲與Grails一起運行的獨立套接字應用程序?

我知道我在問什麼是相當混亂和模棱兩可,但那是因爲我自己一樣困惑。任何幫助將不勝感激,謝謝。

回答

1

Netty應用程序將嚴格用於UDP並在端口162上偵聽。 這是否意味着我應該將它設置爲servlet?

不完全是。使用servlet意味着傳入的請求僅限於HTTP;你需要UDP。

或者我應該將它配置爲一個獨立的套接字應用程序, 與Grails一起運行?

是的,這是正確的做法。您的Netty/UDP服務將在Grails內部運行,並且Grails具有很好的引導功能,其中包括用於管理服務生命週期的servletContext鉤子,在使用套接字確保套接字上的偵聽線程正常終止時非常重要。

假設你Netty的服務是這樣的:

public MyNettyService extends Thread { 
    def port 

    def init(){ 
    ... 
    } 
    public void run(){ 
    //start listener 
    } 
    def shutdown(){ 
    ... 
    } 
} 

配置服務resources.groovy

nettyService(MyNettyService){ bean -> 
     bean.initMethod = "init" 
     port = 12345 
    } 

BootStrap.groovy,配置爲啓動該服務,並關機,與容器:

class BootStrap { 

    def nettyService 

    def init = { servletContext ->  
     nettyService.start()  
    } 
    def destroy = { 
     nettyService.shutdown() 
    } 
} 

這就是我通常使用的盟友呢,但這裏的Grails人都是狂熱的;我相信別人會顯示一個更簡單的方法。

希望它有幫助!

+0

我用盡了一切我仍然無法得到它的工作:(。如果有人可以看看這個,幫助我,這將是巨大的。 https://gist.github.com/diljotr/9030299 –

+0

什麼是不工作?該日誌文件是一英里長,你需要具體的。我看到服務'init'被稱爲,這很好。還有什麼工作?它在哪裏不工作? – raffian

+0

當我用grails運行應用程序我收到一個匿名的「錯誤」,我無法找到原因,並且調用了「準備好連接」的消息,但是當我發送測試數據包時,沒有更多日誌記錄完成,指示套接字沒有正確綁定 此外:當我做'bootstrap.bind(新的InetSocketAddress(「localhost」,162))。sync()'我甚至沒有找到fin al消息'準備好連接'。 匿名錯誤在'new Bootstrap()' –