Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript实时访客信息_Javascript_Php_Redis_Real Time - Fatal编程技术网

Javascript实时访客信息

Javascript实时访客信息,javascript,php,redis,real-time,Javascript,Php,Redis,Real Time,需要一些我目前正在使用的实现反馈 我创建了一个javascript文件,该文件嵌入到我的网站中,每3秒向端点发送一个请求。此请求具有为每个新访问者创建的唯一标识符。然后使用一些键(比如site_123_unique_标识符)将其添加到redis中,该标识符带有json编码的值{“load_time”:189225}。密钥的过期时间为5秒,因为我为每个访问者使用一个唯一的标识符,所以它不会复制访问者,只会增加过期时间 对于我们的实时仪表板,我们每隔几秒钟就向后端发送一次请求,它会访问所有与站点_1

需要一些我目前正在使用的实现反馈

我创建了一个javascript文件,该文件嵌入到我的网站中,每3秒向端点发送一个请求。此请求具有为每个新访问者创建的唯一标识符。然后使用一些键(比如site_123_unique_标识符)将其添加到redis中,该标识符带有json编码的值{“load_time”:189225}。密钥的过期时间为5秒,因为我为每个访问者使用一个唯一的标识符,所以它不会复制访问者,只会增加过期时间

对于我们的实时仪表板,我们每隔几秒钟就向后端发送一次请求,它会访问所有与站点_123*匹配的密钥。然后,我循环遍历它返回的所有redis键,并对其运行json_解码,然后将值相加


这是否适用于每天浏览量超过数百万的网站?如果不是您推荐的解决方案,则必须使用ie7+[xmlhttp而不是sockets]

这在唯一访问者较少时有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询


您是否在计算每个访问者的联机时间?

当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询


您是否在计算每个访问者的联机时间?

当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询


您是否在计算每个访问者的联机时间?

当唯一访问者较少时,此功能有效,如果访问者数量增加,您将在Redis中获得许多密钥,并且当您在Redis上执行keys site_123*时,Redis服务器将被阻塞,直到命令完成,在此阻塞期间,Redis服务器不会处理任何其他查询


您是否在计算每个访问者的在线时间?

模式

  • 散列站点:[siteId]:[visitorId]
    每个访问者的散列,包含“loadt”、“onlinet”、“loc”、“avgSpeed”等字段

  • ZSET-site:visitors
    一个全局ZSET,其中
    siteId:visitorsId
    为成员,
    lastSeen\u-timestamp
    为值,用于手动密钥过期

  • SET site:[siteId]
    一组所有的
    visitorId
    出现在
    siteId

  • SET site
    (可选)一组所有
    siteId

专业人士

  • 它工作,一切都生活在Redis中
  • 多亏了
    散列站点:[siteId]:[visitorId]
    您可以为每个访问者存储/增加任意数量的属性
缺点

  • 你将不得不设法让自己破产。cron(例如每~5秒)必须使用:
    ZRANGE site:visitors(NOW()-5秒)-1检索过期的
    visitorId
然后循环所有成员并执行:

DEL site:(member_value)
然后从第一个成员中提取siteId并执行(
visitorId
每次都从该成员中提取)

(请参阅下面我关于LUA脚本的说明)

  • 每次更新
    散列站点:[siteId]:[visitorId]
    中的值时,您将
执行:

ZADD site:visitors [siteId:visitorId] now()
SADD site:[siteId] [visitorId]
。。。与
HSET
HINCRBY站点:[siteId]:[visitorId]字段值一起使用

  • 您不需要
    json\u解码
    。例如,如果您想要检索特定网站上当前访问者的数量 只需执行:
    SCARD站点:[siteId]

  • 如果需要检索当前连接到
    siteId
    的所有访问者的平均加载时间,最好的方法是使用LUA脚本首先使用
    SMEMBER site:[siteId]
    检索访问者ID,然后循环访问
    visitorId
    并将数据与
    HGET site:[siteId]:[visitorId]loadt
    ,除以
    len(visitorIds)
    就完成了:)

注意

  • 您应该在lua中实现上述算法,以便在Redis中完成所有这些工作,只接收您需要的内容,请参见

模式

  • 散列站点:[siteId]:[visitorId]
    每个访问者的散列,包含“loadt”、“onlinet”、“loc”、“avgSpeed”等字段

  • ZSET-site:visitors
    一个全局ZSET,其中
    siteId:visitorsId
    为成员,
    lastSeen\u-timestamp
    为值,用于手动密钥过期

  • SET site:[siteId]
    一组所有的
    visitorId
    出现在
    siteId

  • SET site
    (可选)一组所有
    siteId

专业人士

  • 它工作,一切都生活在Redis中
  • 多亏了
    散列站点:[siteId]:[visitorId]
    您可以为每个访问者存储/增加任意数量的属性
缺点

  • 你将不得不设法让自己破产。cron(例如每~5秒)必须使用:
    ZRANGE site:visitors(NOW()-5秒)-1检索过期的
    visitorId
然后循环所有成员并执行:

DEL site:(member_value)
然后从第一个成员中提取siteId并执行(
visitorId
每次都从该成员中提取)

<