嵌入式套接字监听器的Netty / Grails Web集成

时间:2014-02-16 02:13:17

标签: spring servlets grails netty

我正在尝试将Netty嵌入Grails(spring)webapp中。我找到了所有的部件并且知道如何使用它们,我唯一不知道的是我应该使用哪一块?

Netty应用程序将严格用于UDP并在端口162上侦听。这是否意味着我应该将其设置为servlet?它是否是一个HTTP servlet,因为它嵌入在webapp中?或者我应该将其配置为与Grails一起运行的独立套接字应用程序?

我知道我要求的是相当混乱和含糊不清的,但那是因为我自己也很困惑。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分: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人都是狂热的;我相信其他人会表现出更轻松的方式。

希望它有所帮助!