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人都是狂熱的;我相信別人會顯示一個更簡單的方法。
希望它有幫助!
我用盡了一切我仍然無法得到它的工作:(。如果有人可以看看這個,幫助我,這將是巨大的。 https://gist.github.com/diljotr/9030299 –
什麼是不工作?該日誌文件是一英里長,你需要具體的。我看到服務'init'被稱爲,這很好。還有什麼工作?它在哪裏不工作? – raffian
當我用grails運行應用程序我收到一個匿名的「錯誤」,我無法找到原因,並且調用了「準備好連接」的消息,但是當我發送測試數據包時,沒有更多日誌記錄完成,指示套接字沒有正確綁定 此外:當我做'bootstrap.bind(新的InetSocketAddress(「localhost」,162))。sync()'我甚至沒有找到fin al消息'準備好連接'。 匿名錯誤在'new Bootstrap()' –