我正在使用大气框架,我正在运行一个在ServletContextListener中启动的线程。
我想广播这个线程放在上下文中的数据,但是我很困惑我要扩展哪个类可以实现ServletContextAttributeListener。
我目前正在扩展OnMessage类,但这似乎不够。
public class SerialComInit implements ServletContextListener {
//..
private static final String SHUTDOWN_REQ = "SHUTDOWN";
public void attributeAdded(ServletContextAttributeEvent event) {
queue = (BlockingQueue<String>) event.getServletContext().getAttribute("serialPortData");
//TODO Use jackson to generate JSON
//TODO Implement SHUTDOWN command on server side
//we always get a null here on first try that's why I added null check
if (queue == null){
System.out.println("Queue is empty");
} else {
String item;
try {
//blocks while queue is empty
while ((item = queue.take()) != SHUTDOWN_REQ) {
System.out.println("*******WEB*******"+item+"*******");
//TODO Broadcast message to connected clients
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("queue error");
//e.printStackTrace();
}
}
}
//..
}
答案 0 :(得分:0)
我通过扩展AbstractReflectorAtmosphereHandler解决了我的问题。
在我的ServletContextAttributeListener中 - &gt; attributeAdded调用它使用
MetaBroadcaster.getDefault().broadcastTo("/", "message");