在Websocket应用程序中初始化时间密集型子系统

时间:2015-04-12 18:27:57

标签: java netbeans websocket

我正在创建一个websocket应用程序,我想在程序初始化时执行一次性时间密集型任务。在创建此应用程序时,建议的做法(https://netbeans.org/kb/docs/javaee/maven-websocketapi.html)将覆盖以下功能:

@ServerEndpoint(value = "/testendpoint", encoders = {TestEncoder.class}, decoders = {TestDecoder.class})
public class WSEndpoint 
{   
    @OnMessage
    public void onMessage(Session wsSession, CommandIn command) throws IOException, EncodeException 
    {
        ...
    } 

    @OnOpen
    public void onOpen(Session wsSession) 
    {
        ...
    }    

    @OnClose
    public void onClose(Session wsSession) 
    {
        ...
    }

    @OnError
    public void onError(Throwable t) 
    {
    }    
}

因此,当创建新的连接/会话时," onOpen"将被呼叫,当收到新消息时," onMessage"被称为。

我想做的是,在让用户创建会话和发送命令(通过浏览器前端)之前,初始化需要大约20秒初始化的子系统。如果它仅在"首次请求使用"初始化,正如我现在所做的那样,那么用户体验就会被中断。显然,没有"主要"函数在这里可见(可能是由websocket框架在更深层次调用)。

你们有什么建议我去做我想做的事情?目前,我在内部类的静态块中有初始化代码 - 它只执行一次 - 但是在类第一次被调用/使用"时会被执行,从而中断用户体验。

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:0)

Web应用程序中初始化代码的最佳位置是ServletContextListenercontextInitialized方法。

这样,您可以在应用程序启动时进行初始化。