2012-11-15 7 views
2

Я работаю над приложением отслеживания в реальном времени, которое использует Node.js и Socket.IO. В моем tracking code, который идет на целевом сайте, у меня есть код, который захватывает строку пользовательского агента браузера и отправляет его обратно на сервер. Это УСПОЛЬЗУЕТСЯ нормально, но есть несколько раз, когда для этих данных задано значение undefined (this is where it happens).Socket.IO обнаружение браузера клиента иногда сбой

На данный момент у меня просто огромный блок try/catch на сервере, поэтому он не сбой при запуске метода, который я определил, чтобы определить, какой браузер он (it crashes when it tries to run the match() method). Я предполагаю, что это происходит либо из ботов, либо из какого-либо другого браузера, у которого нет пользовательского агента или его подделали. Неужели я ошибаюсь? Есть ли другие причины?

Предоставляет ли Socket.IO что-либо для обнаружения браузера? В любом случае, я знаю, что мне нужно сделать функцию обнаружения браузера более надежной, но я просто получаю этот проект от земли.

Если нет лучшего способа сделать это, мне лучше просто проверить, не были ли данные, отправленные на сервер, неопределенными и считать его «другим» браузером?

enter image description here

Чувствуете разницу в общих соединений и общего числа браузера? На данный момент разница составляет немногим более 100. Если эта проблема с отслеживанием браузера не происходила, цифры должны быть точно такими же (потому что КАЖДОЕ соединение будет иметь браузер, разрешение, операционную систему и URL-адрес).

ответ

3

Это фактически не имело никакого отношения к ботам или подделанным данным, как я думал. Моя проблема была связана с редким состоянием гонки, когда клиент подключился к серверу, но отключился перед отправкой данных на сервер (событие «маяк», которое я установил, - это то, где клиент отправляет данные, а сервер получает его). Поэтому, когда клиент отправился отключиться, мой сервер будет искать клиента, но вернет неопределенный результат, потому что данные никогда не отправлялись и не сохранялись в первую очередь. Отличный опыт, но какая боль!

6

Я не очень хорошо знаком с socket.io, но похоже, что вы можете получить заголовки запросов в socket.handshake.headers (Socket.io's Wiki – Authorizing). Я не знаю, какие браузеры запускают JavaScript, но не имеют navigator.userAgent, но, возможно, они отправят HTTP-заголовок User-Agent?

+3

Для любого заинтересованного пользователя ключ агента пользователя является «user-agent» в объекте заголовков. – franzlorenzon

+1

Я в конечном итоге модифицировал сервер, чтобы получить больше информации из заголовков, а не отправлять его из моего кода отслеживания. Очень полезное и уменьшенное потребление полосы пропускания, когда я пытался его на сайте с высоким трафиком! – Aaron

Смежные вопросы