🛠️
[Flutter] flutterでSocket.IOを使う場合の注意点いくつか
flutterでWebSocketを利用する際に、今回はiOSアプリ開発などでも使っているSocket.IOを利用することにしました。 その中でいくつか注意点もあったので以下にまとめておきます。
WebSocket URLの設定
-
URLが
wss
の場合:wss
プロトコルを使用する場合は、明示的にsetTransports(['websocket'])
を設定する必要があります。これにより、安全なWebSocket接続が確立されます。
複数の接続管理
-
複数種類のURLに接続/切断: シングルトンパターンを避け、複数の接続を効果的に管理する場合、
enableForceNewConnection()
を設定します。これにより、新しい接続ごとに新しいインスタンスが生成され、接続管理が容易になります。
これを設定しない場合、デフォルトでは再接続を行う際にキャッシュを利用するような実装になっています。そのため、意図しない接続先が利用されてしまう可能性があります。
名前空間の利用
-
nameSpaceの設定: 名前空間は、URIに直接付加することで指定します。これにより、同じサーバー内で異なるエンドポイント間の通信を区別できます。
例えばwss://example.com/nameSpace
など
接続の終了処理
-
正しい切断処理: 接続を終了する際には、
disconnect()
ではなくdispose()
を使用します。これは、dispose()
がリスナーを適切に削除し、未使用の接続/切断処理が積み重なるのを防ぐためです。
ログの詳細表示
-
詳細なログの表示: アプリケーションで発生するイベントやエラーの詳細を把握したい場合、
logging
パッケージを利用してログレベルを設定します。
例えばsocketのインスタンスを作成する手前に以下のようなコードを設定します。
import 'package:logging/logging.dart';
Logger.root.level = Level.ALL; // 全てのログレベルを記録
Logger.root.onRecord.listen((record) {
debugPrint('${record.level.name}: ${record.time}: ${record.message}');
});
その他、普通にevent設定するところなんかはライブラリのReadmeを読めばわかると思います。
記事を書くのを少しChatGPTに手伝ってもらいました。
Discussion