Jetty websockets同步消息发送

时间:2016-08-04 13:49:57

标签: java jetty jetty-9

我正在使用Jetty 9.3和WebSockets API(而不是jsr 356)。

不同的线程可以向同一个会话/端点发送不同的文本消息,我正在尝试同步它,因此当时只有一条消息被发送到同一个会话。

以下是我正在使用的代码:

private final ReentrantLock lock = new ReentrantLock();

public void sendTextMessage(String s){  
    try {
        boolean isLock=this.lock.tryLock(5, TimeUnit.SECONDS);
        if(isLock){
            this.session.getRemote().sendString(s);
        }else{
            System.out.println("message not send :"+ip);
        }
    } catch (IOException e) {

    } catch (InterruptedException e) {

    }
    finally{
        if(this.lock.isHeldByCurrentThread())
            this.lock.unlock();
    }
}

经过一段时间后,一些线程仍然被阻止。这不是很常见。给你一些统计数据:发送17554165条消息 - > 3个线程被阻止。

我做错了吗?有没有更好的方法来实现这个?

是否有可能this.session.getRemote().sendString(s);未终止并保持线程锁定?

0 个答案:

没有答案