java - getRemote().sendString(msg, new WriteCallback() {..}) 稳定吗?

标签 java asynchronous websocket jetty

我有

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/

相关文章:

c# - NUnit3 : Assert. 抛出异步任务

node.js - Nestjs @SubscribeMessage UnhandledPromiseRejectionWarning : TypeError: this. contextUtils.getContextFactory 不是函数

java - 如何等待所有线程(可变数量的线程)完成并继续 Main?

java - 使用 Spring Data Elasticsearch 进行搜索和过滤

c# - ASP.NET 异步和等待

javascript - React useState 钩子(Hook)没有持续更新

node.js - IBM bluemix 上 NodeRED 中的 WebSocket header

java - Math.nextUp(arg) 始终与 arg + Math.ulp(arg) 相同吗?

java - 如何解决错误: cannot find symbol class Set

C# 任务未按预期工作。奇怪的错误