我有
class MyWebSocket extends WebSocketAdapter
我需要使用以下方法将 text1、text2 和 text3 发送到 websocket 客户端:
getRemote().sendString(text, new WriteCallback() {...})
此调用是异步的,因此我希望该工作是在与 jetty 池不同的线程中完成的。
我的问题是:
我能否确定客户端上的序列是相同的:text1、text2 和 text3?
如果是,请添加官方文档的链接(如果有)。
<小时/>更新: 在 RemoteEndpoint 的文档中人们可以阅读:
void sendString(String text)
throws IOException
Send a text message, blocking until all bytes of the message has been transmitted.
和
void sendString(String text,
WriteCallback callback)
Initiates the asynchronous transmission of a text message. This method may return before the message is transmitted. Developers may provide a callback to be notified when the message has been transmitted or resulted in an error.
那么,对于带有回调的sendString,如果在同一个线程中调用回调,它如何实现异步呢?
另外,这两种方法有什么区别?
最佳答案
该调用只是将 WebSocket 端点的传出文本排队。
然后,当 NIO 层报告可以进行写入时,排队的消息将转换为帧,通过 WebSocket 扩展传递,进行屏蔽(如果从客户端发送),然后写入套接字。
一旦该帧的整个缓冲区写入套接字,就会触发 WriteCallback。
这些都不在不同的线程上。
只有 1 个线程处理写入,它只处理来自队列的消息。
关于java - getRemote().sendString(msg, new WriteCallback() {..}) 稳定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40589551/