2016-11-14 89 views
0

是getRemote()。sendString(msg,new WriteCallback(){..})是否稳定?

class MyWebSocket extends WebSocketAdapter 

我需要发送文本1,文本2和文字3使用到的WebSocket客户端:

getRemote().sendString(text, new WriteCallback() {...}) 

这个调用是异步,因此,我希望工作在不同的线程码头游泳池完成。

我的问题是:

我可以肯定地说在客户端上的顺序是一样的:文本1,文本2和文字3?

如果是,请添加官方文档链接(如果有)。


更新: 在文档RemoteEndpoint一个可以读取:

void sendString(String text) 
     throws IOException 

发送短信,阻塞,直到该消息的所有字节已经 发送。

void sendString(String text, 
       WriteCallback callback) 

发起文本消息的异步传输。该方法 可能会在消息传输之前返回。开发人员可能会提供 回调,以便在消息传输完成时得到通知,或者 导致错误。

因此,如果sendString带回调,如果在同一个线程中调用回调,它如何可以是异步的?

另外,这两种方法有什么区别?

+0

我没有看到回调从同一个线程调用(同步)的异步方法的注释。我估计它是从另一个处理外出帧的线程调用的。 – Matthias247

回答

1

该调用只是将WebSocket端点的传出文本排队。

然后,当NIO层报告可以写入时,排队的消息被转换为帧,通过WebSocket扩展传递,被屏蔽(如果从客户端发送),然后写入套接字。

一旦将该帧的整个缓冲区写入套接字,就会触发WriteCallback。

这不是一个不同的线程。

只有1个线程处理写入,它只处理队列中的消息。

+0

谢谢!我是对的:我的线程被阻塞,直到“NIO层报告写入可能”? – Vitaly

+0

有一个单独的线程处理读取,并通知您的端点。被阻塞的线程不是来自写/ NIO,而是可能是排队。它不是无限的,过了一段时间(由于内存压力)入队块。 –