【问题标题】:Initializing time intensive subsystem in Websocket application在 Websocket 应用程序中初始化时间密集型子系统
【发布时间】:2015-04-12 18:27:56
【问题描述】:

我正在创建一个 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 秒初始化的子系统。如果它只在“第一次请求使用”时初始化,就像我现在所做的那样,那么用户体验就会被打断。显然,这里没有可见的“main”函数(推测是由更深层次的 websocket 框架调用的)。

你们建议我做什么来实现我想做的事情?目前,我在一个内部类的静态块中有初始化代码——它只执行一次——但在第一次“调用/使用”类时执行,中断了用户体验。

有什么建议吗?

谢谢。

【问题讨论】:

    标签: java netbeans websocket


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多