不要通过Netty'发送消息;s Channel.write()在开始发送到网络时是否保留其顺序?

不要通过Netty'发送消息;s Channel.write()在开始发送到网络时是否保留其顺序?,netty,Netty,我正在做某种加密,这取决于通过网络通道发送的消息的顺序。我所期望的是,如果我在消息B之前将消息A写入通道,那么它们应该按照我写入通道的相同顺序发送到远程套接字。那么我需要的案例是否已经得到了Netty的支持 另一方面,Netty的通道接受并发写调用,我怀疑我的要求是否能够满足。由于数据结构的当前状态,我今天不得不在一个全状态(每个通道一个)编码器上进行同步。但是,我仍然不确定过滤器内同步是否有助于我的需要。是的,消息将按照调用Channel.write(..)的相同顺序传输。这里没有什么您需要担

我正在做某种加密,这取决于通过网络通道发送的消息的顺序。我所期望的是,如果我在消息B之前将消息A写入通道,那么它们应该按照我写入通道的相同顺序发送到远程套接字。那么我需要的案例是否已经得到了Netty的支持


另一方面,Netty的通道接受并发写调用,我怀疑我的要求是否能够满足。由于数据结构的当前状态,我今天不得不在一个全状态(每个通道一个)编码器上进行同步。但是,我仍然不确定过滤器内同步是否有助于我的需要。

是的,消息将按照调用Channel.write(..)的相同顺序传输。这里没有什么您需要担心的。

从中获得的答案。(谢谢
Scottmitch@github

Netty可在以下情况下提供“订购”:

  • 您正在从
    EventLoop
    线程执行所有写入操作;或
  • 您没有从
    EventLoop
    线程执行写入操作(即,所有写入操作都在其他线程中执行)
  • 这是一件微妙但重要的事情要记住,因为它会导致痛苦的错误。如果一些
    channel.write()
    调用来自应用程序线程,而另一些来自
    EventLoop
    ,那么从应用程序的角度来看,写操作可能看起来有问题。请参阅有关链接问题的更多详细信息


    这个问题似乎是Netty write ordering的最热门搜索结果,因此我想确保它提到了这一重要的警告。

    据我所知,Netty将保持秩序。如果您使用的是TCP,那么它将负责网络的其余部分。如果使用UDP,则不保证排序。如果可以确定调用Channel.write的两个线程的顺序,则Netty将直接保留它。。Netty只会按照你称为Channel.write(..)的顺序发送内容。就这样。。