`
totobacoo
  • 浏览: 16765 次
  • 来自: K星座
文章分类
社区版块
存档分类
最新评论

SNA 架构下的在线人数统计

阅读更多

  一个 Web 系统,通常都有在线人数统计的需求。 按照常规思路应该是首先声明 HttpSessionListener
 
  然后分别在 sessionCreated、sessionDestroyed 回调方法里面做在线人数的加减法。 有过类似经历

  的同学想必都知道,sessionCreated 回调的触发,并不是通常以为的用户客户端首次连接后发生的,而

  是在首次真正的 session 存取操作时才真正被触发,比如:

   HttpSession session = request.getSession();

首次 session 存取操作时,才真正创建 session 实例,从而触发 sessionCreated 的监听回调。


我现在的系统,学习了 SNA 的做法,完全抛弃了 session 的概念。 客户端只通过 cookie 记录用户Id

之类的标识信息,用户登录后,服务端通过 cookie userId 再向 cache module 拿取用户的详细信息。

这样做的目的跟 SNA 的设计目标一致,是为了以后的水平扩展。


现在面临的问题是,为了统计在线人数,我不得不在某一个全局缺省的 interceptor 里面读取 session,

以触发 session 实例的创建,从而触发 sessionCreated 的监听回调。 本来系统已经实现了 SNA,完全

不再需要 session了, 现在又不得不为此创建一堆无用的 session 实例。 就算现在暂时容忍了这一点,

以后做节点水平扩展的时候,还得面临节点间的在线人数广播通知的问题。。。


用 cookie 来解决这个问题,也不是非常的方便。 因为匿名连接,是要计入在线的。 但是初次访问的用户,

并没有 userId 之类的 cookie 信息,服务端为了区分不同的匿名个体,还需要给客户端 cookie 回写一

些唯一匿名标识。 总之是很繁琐。


不知道大家在处理类似 SNA 的结构方式时,怎么处理这样的问题。
分享到:
评论
4 楼 雁行 2008-03-21  
我们做的一个WEB系统,也有实时统计在线人数和具体人员的要求。
我们采用主框架页AJAX方式定期更新用户在线标记字段和在线时间(更新周期1分钟)。
然后再AJAX方式根据在线标记字段取数据库数据。

带来的问题有两个:
1、读取数据库频率很高,导致大量并行查询SQL
2、判断用户是否离线是通过后台一个调度服务来比对用户最新在线时间是否小于当前时间一个更新周期,需要严格统一几个地方的刷新周期,否则会出现数据不准情况。

不知还有更好的方式没有?
3 楼 totobacoo 2007-12-05  
在线统计的计数自然是放到缓存里的。

我关心的问题是,怎样才能不依赖于 sessionListener。 依赖于 session 不仅仅会多出一大堆的session对象开销,而且,在同一用户被 balancer 丢到不同的节点上后,会创建多个节点上的 session,被重复计数。

目前我的实现是通过 cookie 来做的,每次请求都查看 cookie userId 以维护在线统计,不幸的是,同样面临多个节点间的重复计数问题。

看来是必须得有一个广播通知机制来做查重和同步。
2 楼 hocus 2007-12-05  
dingyuan 写道
既然都sna了。。在线统计的计数也放到缓存或者给数据库用户表加一个字段,标示用户是否在线。。


在线统计的计数也放到缓存

表存储就算了,考虑数据量啊,另外当多个db还要数据同步,自找麻烦
1 楼 dingyuan 2007-12-05  
既然都sna了。。在线统计的计数也放到缓存或者给数据库用户表加一个字段,标示用户是否在线。。

相关推荐

    IBM SNA Knowledge

    - **协议兼容性**:SNA的设计考虑了与OSI参考模型的兼容性,这使得SNA能够与OSI标准下的其他网络协议进行有效的交互。 #### 六、总结 IBM Systems Network Architecture (SNA) 是一种历史悠久且功能强大的企业级...

    sna session

    sna session实现方案实例,稍微修改下即可用于产品

    Sensor Network Analyzer (SNA)

    - **强大的分析能力**:SNA 能够对 ZigBee 和 802.15.4 标准下的网络进行全面深入的分析。 - **卓越的配置与管理功能**:该工具不仅支持高效的网络配置,还能实现远程升级等高级管理操作。 ##### 3. 加速解决方案的...

    SNA核算体系的理论基础透析.doc

    《SNA核算体系的理论基础透析》这篇文章探讨的核心议题是SNA(System of National Accounts,国民账户体系)核算体系的理论基础,特别是在中国引入这一体系后,对马克思主义政治经济学及其劳动价值论的影响。...

    网络游戏-SNA网络体系下交互数据的传输方法及装置.zip

    在网络游戏领域,SNA(System Network Architecture,系统网络架构)是一种传统的网络通信协议集,主要用于IBM大型机系统。然而,随着技术的发展,SNA的概念也被借鉴到其他领域,包括网络游戏中的数据传输。本文将...

    sna.rar_in

    在IT行业中,SNA(System Network Architecture,系统网络架构)是一种由IBM公司开发的网络通信模型,主要用于大型企业或组织的内部网络通信。SNA提供了多种服务,包括数据传输、网络控制以及资源管理等,使得不同...

    SNA PD 確認程序

    "SNA PD 確認程序" 是针对IBM System Network Architecture(SNA)状态查询的一种工具或过程,旨在帮助用户监控和理解SNA网络中的系统状态。SNA是IBM开发的一种网络通信协议,广泛用于大型机环境,提供了一种在不同...

    SNA on linux 管理手册

    - **System Network Architecture (SNA):** SNA是IBM开发的一种网络架构,用于在大型机和其他计算机之间建立连接。它提供了一种灵活且高效的方式来管理不同类型的网络资源。 - **LU (Logical Unit):** LU是在SNA网络...

    sna集中式session管理实现服务器集群及客户端程序

    sna集中式session管理实现服务器集群及客户端程序,以“单点登陆、session共享解决方案(2)”为基础建立的服务器机群应用,运行server.bat启动服务器端,将client包导入web工程,通过Client.sessionPut()等方法调用。...

    cas-center加sna.rar

    总的来说,“cas-center加sna.rar”文件中的内容涉及了SSO技术的高级应用,特别是对于拥有复杂网络架构的企业来说,如何有效地结合CAS-Center和SNA以提升用户认证体验和网络安全。通过深入学习这些知识点,开发者和...

    Python库 | sna_prediction-1.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:sna_prediction-1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    SNA

    国民账户体系(System of National Accounts,简称SNA)是全球经济统计的核心框架,它提供了一套统一的方法来衡量一个国家或经济体的经济活动。这一体系对于政策制定者、经济学家以及研究者来说至关重要,因为它提供...

    c7200-adventerprisek9_sna-mz.150-1.M.bin

    c7200-adventerprisek9_sna-mz.150-1.M.bin

    SNA新闻采集系统v1.0.2 For 动易4.03

    【SNA新闻采集系统v1.0.2 For 动易4.03】是一款专为动易4.03版本设计的新闻自动化采集工具,旨在帮助用户高效、快速地从互联网上抓取并整合新闻资源。这款系统的核心功能包括新闻源识别、内容筛选、自动发布等多个...

    PyPI 官网下载 | sna-0.0.9.tar.gz

    在实际使用中,开发者或用户需要先解压`sna-0.0.9.tar.gz`,然后通过Python的`setup.py`文件安装库,例如,使用`pip install .`命令(在库的根目录下)。安装完成后,便可以在项目中导入`sna`库,开始进行社会网络...

    sna lecture notes

    sna lecture notes , erdos reyni

    基于SNA的经济仿真热点分析

    3. 统计软件ROSTCM与词频统计:文章使用ROSTCM这一统计软件对收集到的文章关键词进行词频统计,以识别出现频率较高的关键词,这些关键词反映了经济仿真领域的热点研究对象。 4. 共现矩阵与社会网络分析软件Ucinet:...

Global site tag (gtag.js) - Google Analytics