【发布时间】: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 框架调用的)。
你们建议我做什么来实现我想做的事情?目前,我在一个内部类的静态块中有初始化代码——它只执行一次——但在第一次“调用/使用”类时执行,中断了用户体验。
有什么建议吗?
谢谢。
【问题讨论】: