想要实现定时向后端发送数据,请问有什么好的办法???

我们现在要做一个前端监控项目,获取用户行为记录的功能,然后收集起来,隔一段时间将统计好的记录发给后端;除了Ajax轮询;可以用 webSocket 吗?具体怎么实现好些呢

还有一个问题就是。假设我10秒提交一次,我10秒内刷新页面会造成数据丢失的问题?放入LocalStorage?

阅读 3.5k
3 个回答
  1. 根据你的需求其实不需要websocket,也没必要轮询,做个interval发送就行了。
    一般情况下,使用websocket 或 轮询 是实时通信的需要,后端有消息需要及时通知到客户端才会使用这种方式。不要把简单的需求复杂化。
  2. 10秒内刷新的问题,也是用户离开时数据不能及时发送出去。
    解决方案:localstorage + onbeforeunload。onbeforeunload可以监听页面离开事件,在这里可以发送一次请求,但不一定能触达后端。另外直接杀进程的情况时不触发onbeforeunload的。
    故localstorage 来解决最后没发送到后端的数据。

PS: 我自己也开发了用户行为跟踪的插件,我是实时发的,触发行为事件用1像素图片的查询字符串携带要传输的数据。用户的环境数据在loaded后发post请求。

webSocket稳定性是个问题,容易断开,如果要用webSocket,要做心跳检测。
最好考虑在后端解决这个问题,用户做了操作后,后端立刻就记录行为到日志或者数据库里

方案一:mqtt也不错哦,这里提供一种mqtt工具,你也可以再看看其他mqtt工具,多对比,找出合适的工具。mqtt提供消息类型的订阅,如果前端监控的类型比较多,且需要接收后端反馈时,用mqtt就很舒服了,不会出现多个onMessage同时响应
方案二:存储在localStorage也是可行的,不过好像会出现一种情况,用户以后都不打开或者很久一段时间以后再打开,这时候可以监听页面关闭或者组件销毁时去提交一次数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题