客户端浏览器的Socket.IO检测有时会失败

时间:2012-11-15 21:34:54

标签: javascript node.js websocket socket.io real-time

我正在开发一个使用Node.js和Socket.IO的实时跟踪应用程序。在我的tracking code目标网站上,我有一些代码可以抓取浏览器的用户代理字符串并将其发送回服务器。这个USUALLY工作正常,但有几次将此数据设置为undefined(this is where it happens)。

现在,我只是在服务器上有一个巨大的try / catch块,因此在运行我已经定义的方法来检测它是什么浏览器(it crashes when it tries to run the match() method)时它不会崩溃。我假设这是从机器人或其他没有用户代理或已被篡改的浏览器发生的。我错了吗?还有其他原因吗?

Socket.IO是否提供浏览器检测功能?无论哪种方式,我知道我需要使浏览器检测功能更加强大,但我只是让这个项目开始实施。

如果没有更好的方法可以做到这一点,我最好只检查发送到服务器的数据是否未定义并将其视为“其他”浏览器?

enter image description here

查看总连接数和浏览器总数的差异?目前,有一点差异超过100.如果没有发生此浏览器跟踪问题,则数字应该完全相同(因为每个连接都有浏览器,分辨率,操作系统和URL)。

2 个答案:

答案 0 :(得分:6)

我对socket.io不是很熟悉,但看起来您可以在socket.handshake.headersSocket.io's Wiki – Authorizing)中获取请求标头。我不知道哪些浏览器运行JavaScript但没有设置navigator.userAgent,但他们可能会发送用户代理HTTP标头?

答案 1 :(得分:3)

这实际上与机器人或被篡改的数据无关,就像我认为的那样。我的问题是由于罕见的竞争条件,客户端将连接到服务器但在将数据发送到服务器之前断开连接(我设置的“信标”事件是客户端发送数据并且服务器接收数据的地方)。因此,当客户端断开连接时,我的服务器将查找客户端,但会返回未定义的结果,因为数据从未首先发送和存储。一个有益的经历,但多么痛苦!