我正在开发一个websocket实现,它从几个(大约10个)Android客户端收集数据。 所以我创建了一个经典的ServerEndpoint,当前在localhost上运行,在客户端创建了一个应用程序,它打开了与ServerEndpoint的连接并每500ms发送一次传感器数据。
如果我只使用一个客户端,那么整个工作正常并准时。 但是,如果我使用多个客户端,它们会按时发送消息,但会随机调用ServerEndpoints onMessage。看起来它会将来自客户端的消息“排队”几秒钟,然后连续5次触发onMessage方法。但是我总是需要在确切的时间。我可以强迫这个吗?
没有出现错误或异常。
这是最基本的服务器端:
@ServerEndpoint("/ServerEndpoint")
public class ServerEndpoint {
static Set<Session> connections = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void handleOpen(Session userSession){
log("opened session: "+ userSession);
connections.add(userSession);
}
@OnMessage
public void handleMessage(String message, Session userSession) throws IOException{
String userName = (String) userSession.getUserProperties().get("username");
log("received message from: "+ userName+": "+Calendar.getInstance().get(Calendar.SECOND)+":"+Calendar.getInstance().get(Calendar.MILLISECOND)+ " "+ message );
....
}
@OnClose
public void handleClose(Session userSession){
log("closed session: "+userSession);
connections.remove(userSession);
}
我想我错过了ServerEndpoint的一些配置选项。有人知道导致这种行为的原因以及如何解决这个问题吗?
答案 0 :(得分:0)
好吧,明白了。问题是 Tomcat 7 ,这显然有一些websockets的问题。使用 Tomcat 8 ,它现在可以正常运行,没有任何队列或大延迟。更新也解决了其他小错误和连接问题,它似乎更加稳定。
也许这有助于遇到类似问题的人。