Javascript inspectlet和其他服务如何存储用户视频会话?

Javascript inspectlet和其他服务如何存储用户视频会话?,javascript,jquery,ruby-on-rails,node.js,express,Javascript,Jquery,Ruby On Rails,Node.js,Express,我想知道这些服务是如何存储视频会话的,从外观上看,我不认为这是一个webRTC实现。我发现有一个活动的expresssocket正在进行通信,但在这种情况下,它们必须存储页面并跟踪DOM中的所有事件。Justed想确认这是他们正在遵循的方法 问候,, Muaaz-Rafi查看页面上的事件侦听器,似乎有很多绑定。例如,具有绑定到函数的滚动、键控和更改事件。我确信它也有mousemove,mouseclick,等等。所有这些都可能存储在一个Javascript变量(可能是object)中,然后每隔一

我想知道这些服务是如何存储视频会话的,从外观上看,我不认为这是一个webRTC实现。我发现有一个活动的expresssocket正在进行通信,但在这种情况下,它们必须存储页面并跟踪DOM中的所有事件。Justed想确认这是他们正在遵循的方法

问候,,
Muaaz-Rafi

查看页面上的事件侦听器,似乎有很多绑定。例如,
具有绑定到函数的
滚动
键控
更改
事件。我确信它也有
mousemove
mouseclick
,等等。所有这些都可能存储在一个Javascript变量(可能是object)中,然后每隔一段时间就与数据参数进行一次调整。以下是发送内容的示例:

http://hn.inspectlet.com/adddata?d=mr,212941,46,337,46,1277)mr,213248,163,498,163,1438)mr,213560,144,567,144,1507)mr,213873,138,240,138,1180)mr,214188,169,184,169,1124)mr,214504,158,520,158,1460)mr,214816,231,487,231,1427)mr,215130,329,197,329,1137)mr,215444,894,289,894,1229)mr,215755,903,295,903,735)s,215755,440,0)&w=259769975&r=494850609&sd=1707&sid=1660474937&pad=3&dn=dn&fadd=false&oid=99731212&lpt=212629

正如Adam在回答中所建议的,他们跟踪页面中的许多事件,并通过websocket或post/get请求(XHR)将它们发送到服务器

我不确定inspectlet具体做什么,但一般来说,此类解决方案需要遵循以下一般步骤:

当页面完全加载时(可能是DOMContentLoaded上的hook),他们会将页面数据发送到服务器。然后,它们还挂接MutationObserver,以便跟踪页面中对DOM的所有更改,因此当某些内容动态更改时,跟踪脚本可以“记录”它并将其发送到服务器

反过来,SaaS应用程序将有一个播放器,该播放器将解析所有这些原始数据,然后回放,这通常需要使用一些虚拟文件系统进行资产(图像、css、脚本)并处理js脚本,以避免再次发回(回放xhr将对跟踪的网站产生不良结果)但在捕获(记录)突变时回放突变

就数据而言,HTML页面压缩得非常好,特别是当你可以对数据进行假设时(因为你知道它的HTML)-因此,是的,它们实际上缓存了很多数据(与谷歌在这方面的做法类似,但谷歌为整个web做这件事,而不仅仅是“客户”)

DOM突变也需要存储。这取决于算法,它可以存储为纯文本,也可以使用更智能的数据模型,将它们存储为纯文本显然不是经济高效的解决方案


以上是一个抽象概念,为了实现这样一个解决方案,需要处理许多边缘情况,以及许多关于热图的数学和算法思想,以使其精确。

因此,经过长时间的搜索,我们能够在区块上找到一个新的有希望的解决方案,它解决了构建此类服务的所有复杂部分。它仍在开发中,但它解决了这个问题。下面是它的链接


但是他们是如何维护页面状态的,这让我感到困扰。他们下载页面并维护页面状态或将其缓存在服务器上。任何想法都会很有帮助,感谢您的回复。我不太确定我是否理解。如果他们不断地收集环境数据并每秒将其发送到服务器,他们就不一定需要知道页面上有什么内容或发生了什么变化。我不完全确定这个概念是否适用于动态生成的页面,因为他们必须在加载时发送整个页面内容,然后用户事件和内容每次ping都会更改。用户事件占用的数据很少。页面HTML不支持。此外,它们还会丢失任何元素绑定等。我们可以看到,它们正在以gif格式发送数据包。。。那么如何将页面数据转换成gif呢?他们在这里说,“Inspectlet的屏幕捕获是代码的一个组成部分,它通过记录在浏览器中发生的所有事件来工作,例如击键、鼠标移动、滚动、单击,然后发送这些数据(只有字节大小)到我们的服务器。一旦我们收到这些数据,我们就会通过将事件叠加到访客页面上来编译屏幕截图。“因此,当他们发送数据时,很可能也会考虑时间,然后只需在他们端一起播放就行了。没有魔法。你知道如何将整个页面发送到服务器上吗?在一些网页上有大量的数据…一个词:gzip,但是HTML也可以用更简单的压缩方法进行相对较好的压缩。是的,有些页面甚至可以达到非常大的大小——我假设这些解决方案也会有一种机制来理解是否需要发送页面——毕竟,页面的单一版本通常就足够了。