2

Node.jsとSocket.IOを使用するリアルタイムトラッキングアプリケーションに取り組んでいます。ターゲットサイトにあるトラッキングコードには、ブラウザのユーザーエージェント文字列を取得してサーバーに送り返すコードが含まれています。これは通常は正常に機能しますが、このデータが未定義に設定される場合があります(これが発生する場所です)。

今のところ、サーバー上に巨大なtry / catchブロックがあるので、それがどのブラウザーであるかを検出するために定義したメソッドを実行してもクラッシュしません(match()メソッドを実行しようとするとクラッシュします)。これは、ボットから、またはユーザーエージェントがないか、改ざんされた他のブラウザから発生していると思います。私はそれについて間違っていますか?他に理由はありますか?

Socket.IOはブラウザ検出のために何かを提供しますか?いずれにせよ、ブラウザー検出機能をより堅牢にする必要があることはわかっていますが、このプロジェクトを軌道に乗せているところです。

これを行うためのより良い方法がない場合は、サーバーに送信されたデータが未定義であるかどうかを確認し、それを「その他」のブラウザーと見なす方がよいでしょうか。

ここに画像の説明を入力してください

合計接続数と合計ブラウザ数の違いがわかりますか?現時点では、100を少し超える違いがあります。このブラウザ追跡の問題が発生していなかった場合、数値はまったく同じである必要があります(すべての接続にブラウザ、解像度、オペレーティングシステム、およびURLがあるため)。

4

2 に答える 2

6

私はsocket.ioにあまり詳しくありませんが、リクエストヘッダーはsocket.handshake.headersSocket.ioのWiki – Authorizing)で取得できるようです。どのブラウザがJavaScriptを実行しているかはわかりませんがnavigator.userAgent、設定されていませんが、User-Agent HTTPヘッダーを送信する可能性がありますか?

于 2012-11-16T12:55:15.093 に答える
3

これは、私が思っていたように、ボットや改ざんされたデータとは実際には何の関係もありませんでした。私の問題は、クライアントがサーバーに接続するが、サーバーにデータを送信する前に切断するというまれな競合状態が原因でした(私が設定した「ビーコン」イベントは、クライアントがデータを送信し、サーバーがデータを受信する場所です)。したがって、クライアントが切断されると、サーバーはクライアントを検索しますが、データが最初から送信および保存されなかったため、未定義の結果を返します。やりがいのある経験ですが、なんて辛いことでしょう。

于 2012-11-18T06:27:28.117 に答える