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 Header?

于 2012-11-16T12:55:15.093 回答
3

This actually had nothing to do with bots or tampered data like I thought it did. My problem was due to a rare race condition where the client would connect to the server but disconnect before sending the data to the server (the "beacon" event I have set up is where the client sends the data and the server receives it). So when the client went to disconnect, my server would look up the client but would return a undefined result because the data was never sent and stored in the first place. A rewarding experience but what a pain!

于 2012-11-18T06:27:28.117 回答