2

特定のWebSocketConnectionインスタンスから、それが表すクライアントの IP/ポートを抽出できる方法はありますか? 実装 (つまり_WebSocketConnectionBase) がSocketプライベート変数として を持っていることは知っていますが、それをハッキングすることはできません。回避策はありますか?

この機能が必要な環境は次のとおりです。Web ソケット接続を処理するサーバーがあり、Web ソケットと一緒にクライアントの IP を保存したいと考えています。サーバーを次のようにインスタンス化します。

var server = new HttpServer();
var wsHandler = new WebSocketHandler();

wsHandler.onOpen = this.subscribeUser;
server.addRequestHandler((req) => req.path == "/ws", wsHandler.onRequest);
...
subscribeUser(WebSocketConnection user){...}

このコードのどこかでこの機能をハッキングすることは可能ですか? 事前にどうもありがとうございました!

4

1 に答える 1

1

WebSocketHandler の拡張実装を作成して、ここからリクエストを取得できます。例:

class betterWebSocket implements WebSocketHandler {
  WebSocketHandler _wsHandler = new WebSocketHandler();

  void onRequest(HttpRequest request, HttpResponse response) {
    print(request.connectionInfo.remoteHost); // Print the IP of the remote to the screen
    _wsHandler.onRequest(request, response);
  }

  void set onOpen(callback(WebSocketConnection connection)) {
    _wsHandler.onOpen = callback;
  }
}

このクラスを通常の WebSocketHandler として使用できます。

void main() {
  HttpServer server = new HttpServer();
  betterWebSocket wsHandler = new betterWebSocket();

  server.addRequestHandler((req) => req.path == "/", wsHandler.onRequest);

  wsHandler.onOpen = (WebSocketConnection conn) {
    print("New connection");

    conn.onMessage = (message) {
      print("message is $message");
    };

    conn.onClosed = (int status, String reason) {
      print('closed with $status for $reason');
    };

  server.listen('127.0.0.1', 20024);
};
于 2013-01-06T21:18:00.923 に答える