nettyとiosを使用してサーバークライアントアプリケーションを構築していますが、ユーザーがiosデバイスのWiFiをオフにしたときに問題が発生しました。 サーバーは、そのユーザーのクリーンアップを行い、オフラインに設定することを知っておく必要がありますが、ユーザーが再び接続しようとすると、サーバーは既にオンラインになっていると通知します。Netty Channel closed detection
10
A
答えて
13
私が正しくあなたの問題を理解している場合:あなたは、クライアントチャネルをリッスンするサーバ側のイベントを閉じて、いくつかのセッションのクリーンアップを行い、
チャネルをリッスンするには、2つの方法がありますが網状にイベントを閉じて:
サーバーハンドラがSimpleChannelHandler/SimpleChannelHandler
を拡張する場合は、チャネル参照へのアクセスのみを持っている場合は1)、その後することができますグラム、)あなたは、次のメソッドをオーバーライドすることができますし、
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception;
にあり
2をお使いのセッションクリーンアップ・ロジックを書きますらチャネル近い将来とは、あなたのセッションのクリーンアップ・ロジックと
ChannelFuture closeFuture = channel.closeFuture();
closeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
//session cleanup logic
}
});
1
チェックセッションIDをChannelFutureListener
の実装を登録し、再交渉が可能。あるいは、クッキーコントローラのようなものを使うかもしれません。 トピックの質問から尋ねることができます:iosのクライアントはどのようにNettyサーバーとやりとりしますか? (どのようなフレームワークを使用すると、クライアント側で使用し、そしてどのようなデコーダ/エンコーダ使用?)
3
所定の時間間隔には、要求/応答がないときは、検出することができます。
関連する問題
- 1. JXTA 2.7 java.lang.NoClassDefFoundError:org/jboss/netty/channel/socket/httptunnel/HttpTunnelClientChannelFactory
- 2. Netty closeFuture()。sync()。channel();残りの部分をブロックする
- 3. Keypress detection
- 4. SocketException:socket closed
- 5. Website Spidering Auto Detection
- 6. WIX Office Detection Extension
- 7. Angular4 Change Detection ExpressionChangedAfterItHasBeenCheckedError
- 8. javascript keypress detection
- 9. Java Collision Detection
- 10. Android Gesture Detection
- 11. Intrusion DetecTion DataSet
- 12. Tensorflow Anomaly Detection
- 13. OpenCV Color Detection Error
- 14. jquery mobile orientation detection
- 15. Javascript canvas collision detection
- 16. Allegro Circle Collision Detection
- 17. python opencv shape detection
- 18. Java-Shape Collision Detection
- 19. Open cv scratch detection
- 20. Python Selenium Detection Error?
- 21. Meteor publication error detection
- 22. Android Process closed onClick
- 23. Oracle Connection closed
- 24. Word.Interop document closed
- 25. Javascript Toggle closed
- 26. Android:Bluetooth Socket closed
- 27. JDBC ResultSet closedステートメント
- 28. test channel NetHandlerでのハンドラ
- 29. Netty port on Heroku
- 30. io.netty.util.IllegalReferenceCountException:refCnt:0 in Netty
私はchannelClosedメソッドを実装していますが、ユーザーがアプリケーションを閉じたときにうまく動作しますが、ユーザーがWi-Fi接続を失っただけではこのメソッドは呼び出されません。 –
最適なアイドルタイムアウトを持つIdleStateHandlerを追加する方が良いでしょう。ユーザーがその時間を超えてアイドル状態になっている場合は、おそらく接続が失われている可能性があります。そのため、サーバーハンドラからのIdleStateEventの接続を閉じます。 –
新しいバージョンのNettyでは、 'getCloseFuture()'は 'closeFuture()'のようです。 – childofsoong