Gibt es einen Unterschied? Ist ctx.close
nur eine kürzere Version von ctx.channel.close
?In Netty 4, was ist der Unterschied zwischen ctx.close und ctx.channel.close?
12
A
Antwort
22
Nehmen wir an, wir haben drei Handler in der Pipeline, und alle fangen den close()
-Vorgang ab und rufen ctx.close()
darin auf.
ChannelPipeline p = ...;
p.addLast("A", new SomeHandler());
p.addLast("B", new SomeHandler());
p.addLast("C", new SomeHandler());
...
public class SomeHandler extends ChannelOutboundHandlerAdapter {
@Override
public void close(ChannelHandlerContext ctx, ChannelPromise promise) {
ctx.close(promise);
}
}
Channel.close()
triggertC.close()
,B.close()
,A.close()
, und dann um den Kanal zu schließen.ChannelPipeline.context("C").close()
wirdB.close()
,A.close()
auslösen und dann den Kanal schließen.ChannelPipeline.context("B").close()
wirdA.close()
auslösen, und schließen Sie dann den Kanal.ChannelPipeline.context("A").close()
wird den Kanal schließen. Es werden keine Handler angerufen.
Also, wenn Sie Channel.close()
und ChannelHandlerContext.close()
verwenden sollten? Die Faustregel:
- Wenn Sie ein
ChannelHandler
und wollen in der Nähe des Kanals in der Prozedur zu schreiben, rufenctx.close()
. - Wenn Sie den Kanal von außerhalb des Handler schließen (zB haben Sie einen Hintergrund-Thread, die nicht ein I/O-Thread ist, und Sie möchten die Verbindung von diesem Thread schließen.)
17
ctx.close() beginnt von der Stelle des ChannelHandlerContext aus über die ChannelPipeline zu fließen, während ctx.channel(). Close() immer vom Ende der ChannelPipeline aus startet.
Verwandte Themen
- 1. Rails 4 - Was ist der Unterschied zwischen request.original_fullpath und request.fullpath
- 2. Was ist der Unterschied zwischen UTF-32 und UCS-4?
- 3. Was ist der Unterschied zwischen `==` und `ist`?
- 4. Was ist der Unterschied zwischen/* ... */und/** ... */
- 5. Was ist der Unterschied zwischen + = und = +?
- 6. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 7. Was ist der Unterschied zwischen:.! und: r !?
- 8. Was ist der Unterschied zwischen Verilog! und ~?
- 9. Was ist der Unterschied zwischen Difftime und '-'?
- 10. Was ist der Unterschied zwischen $ und $$?
- 11. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 12. Was ist der Unterschied zwischen `&` und `ref`?
- 13. Was ist der Unterschied zwischen $ (...) und `...`
- 14. Was ist der Unterschied zwischen .Equals und ==
- 15. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 16. Was ist der Unterschied zwischen? und ? = Nil
- 17. Was ist der Unterschied zwischen:
- 18. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 19. Was ist der Unterschied zwischen add und [] in der Wörterbuchoperation
- 20. Was ist der Unterschied zwischen ApplicationServices und RequestServices in Microsoft.AspNet.Http.HttpContext?
- 21. C++ STL :: Was ist der Unterschied zwischen inplace_merge und sort
- 22. Was ist der Unterschied zwischen `-Contains` und` -In` in PowerShell?
- 23. Was ist der Unterschied zwischen UNION und CROSS JOIN?
- 24. Was ist der Unterschied zwischen diesen Stack- und Heap-Speicheradressen?
- 25. Was ist der Unterschied zwischen der JSP und der JSTL?
- 26. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 27. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 28. Was ist der Unterschied zwischen iter und in_iter?
- 29. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 30. ARM NEON: Was ist der Unterschied zwischen vld4_f32 und vld4q_f32?
Im Allgemeinen ctx .channel.close sollte verwendet werden? Können Sie Beispiele geben, in denen ctx.close verwendet werden sollte? –
Im Allgemeinen können Sie ctx.close() verwenden, wenn Sie wissen, dass der "spätere" ChannelHandler in der ChannelPipeline das Close-Event nicht interessiert. –
Antwort aktualisiert. – trustin