当连接到多个客户端时,ServerEndpoints onMessage“排队”

时间:2015-10-05 07:52:21

标签: java websocket

我正在开发一个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的一些配置选项。有人知道导致这种行为的原因以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好吧,明白了。问题是 Tomcat 7 ,这显然有一些websockets的问题。使用 Tomcat 8 ,它现在可以正常运行,没有任何队列或大延迟。更新也解决了其他小错误和连接问题,它似乎更加稳定。

也许这有助于遇到类似问题的人。