青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

勤能補拙,Expter

成都游戲Coder,記錄游戲開發(fā)過程的筆記和心得!

關于會話記錄Session的實現(xiàn)

       Session的適用性很廣,翻譯為‘會話’,最初接觸他的時候在做web方面,可以記錄一個用戶的會話記錄,當關閉瀏覽器的時候失效!Session實際上是一個特定的時間概念.

      在最開始接觸它時沒有刻意的研究實現(xiàn)與擴展性,然后最近的一個工程有這樣的一個功能,就是統(tǒng)計最近5分鐘的流量。其實完全可以設計一個Session來記錄當前的流量,然后設置超過5分鐘后的流量自動釋放。

       感覺起來像一個定時器,其實可以設置每個數(shù)據(jù)包的超時時間,即會話時間(Session),然后自動釋放與自動增加。

下面是實現(xiàn)代碼:
  1#pragma once
  2
  3/////////////////////////////////////////////////
  4//! 會話Session記錄模板
  5/////////////////////////////////////////////////
  6
  7#include <list>
  8using namespace std;
  9
 10#define  MAXTIME     1<<32
 11#define  FLAGLAY     true
 12
 13template<class Sessinfo>
 14class Session
 15{
 16
 17public:
 18
 19    // 默認構造函數(shù)
 20    Session()
 21        :M_lMaxHoldTime(MAXTIME)
 22        ,M_bAllowOverlay(FLAGLAY)
 23    {}
 24
 25    // 構造函數(shù)
 26    Session(long MaxTime , bool bAllOverlay =  true)
 27        :M_lMaxHoldTime(MaxTime)
 28        ,M_bAllowOverlay(bAllOverlay)
 29    {}
 30
 31    // 只有一個會話記錄
 32    static Session   *Getinstance()
 33    {
 34        if( instance == NULL )
 35        {
 36           instance = new Session();
 37        }

 38        return instance;
 39    }

 40
 41    virtual ~Session(){}
 42
 43
 44public:
 45    // 增加一個新的會話
 46    // 如果不想使用構造時定義的有效保持時間,可以根據(jù)用戶
 47    // 返回增加失敗與成功否。
 48
 49    bool AddSession(const Sessinfo &Info , int HoldTime = 0)
 50    {
 51        // 清理超時會話
 52        long Now_time = time(NULL);
 53        DealOutTime(Now_time);   
 54
 55        // 查找某個值,然后進行操作
 56        for(list<ESession>::iterator it =Mlist_Session.begin() ; it != Mlist_Session.end();it++)
 57        {    
 58            if( comp(it->ENode , Info))
 59            {
 60                if(M_bAllowOverlay)     
 61                {
 62                    it = Mlist_Session.erase(it);
 63                    break;
 64                }

 65                else
 66                {
 67                    return false;
 68                }

 69            }

 70        }

 71        // 創(chuàng)建一個新的節(jié)點
 72        ESession NewSession;
 73        NewSession.ENode = Info;
 74        if(HoldTime != 0)
 75            NewSession.SEndTime = Now_time + HoldTime;
 76        else
 77            NewSession.SEndTime = Now_time + M_lMaxHoldTime;
 78
 79        // 如果沒有等待時間,表示處于長等狀態(tài)
 80        if(HoldTime != 0)
 81        {
 82            for(list<ESession>::iterator ite =Mlist_Session.begin(); ite !=Mlist_Session.end(); ite++)
 83            {
 84                if(ite->SEndTime > NewSession.SEndTime )
 85                {
 86                    if( Mlist_Session.begin() == ite)
 87                    {
 88                        Mlist_Session.push_front(NewSession);
 89                    }

 90                    else
 91                    {
 92                        Mlist_Session.insert(--ite,NewSession);
 93                    }

 94                    return true;
 95                }

 96            }

 97        }
    
 98        Mlist_Session.push_back(NewSession);
 99        return true;
100    }

101
102    // 驗證一個拷貝會話,
103    // 驗證一個會話,完成后是否刪除
104    bool TestCopySession(const Sessinfo & Info, bool bRemove = true)
105    {
106        // 清理超時會話
107        long Now_time = time(NULL);
108        DealOutTime(Now_time);   
109
110        // 查找某個值,然后進行操作
111        for(list<ESession>::iterator it =Mlist_Session.begin() ; it != Mlist_Session.end(); it++)
112        {    
113            if(it->ENode == Info)
114            {
115                memmove(&Info,&(it->ENode),sizeof(Session));
116                if(bRemove)     
117                {
118                    it = Mlist_Session.erase(it);
119                    return true;
120                }

121            }

122        }

123        return false;
124    }

125    
126    void Run_ForEach(void (*Fun)(Sessinfo &,void *),void * lparam)
127    {
128        DealOutTime(time(NULL));
129        
130        for(list<ESession>::iterator it =Mlist_Session.begin() ; it != Mlist_Session.end(); it++)
131        {
132            (*Fun)(it->ENode,lparam);
133        }

134    }

135
136    friend ostream & operator << <>(ostream &out , const Session<Sessinfo> &sess);
137
138protected:
139    // 處理以及超時的結點,然后刪除
140    void  DealOutTime(long Now_time)
141    {
142        // Mlist_Session有序列表,結束時間從前向后排列,
143        for(list<ESession>::iterator it=Mlist_Session.begin(); it != Mlist_Session.end(); )
144        {
145            if(it->SEndTime < Now_time)
146            {
147                it = Mlist_Session.erase(it);
148            }

149            else
150            {
151                return ;
152            }

153        }

154    }

155    
156private:
157    
158    // 會話元素
159    struct ESession
160    {
161        long        SEndTime;// 會話結束時間      
162        Sessinfo    ENode;   // 會話節(jié)點
163    }
;
164    
165    list<ESession>  Mlist_Session;          //   保存的會話元素的鏈表
166    long            M_lMaxHoldTime;            //   最大會話時間(秒),通過time來得到
167    bool            M_bAllowOverlay;        //   創(chuàng)建的會話已存在的時候時候覆蓋。
168    
169
170    static Session  *instance;
171}
;
172
173template<class Sessinfo>
174ostream & operator << (ostream &out , const Session<Sessinfo> &sess)
175{
176    for(list<Session<Sessinfo>::ESession>::const_iterator it = sess.Mlist_Session.begin() ; it != sess.Mlist_Session.end(); it++)
177    {
178        cout << *((int*)&(it->ENode)) <<" = "<< *(((int*)&(it->ENode))+1<<endl;
179    }

180    cout <<" ----------------------------------"<<endl;
181    return out;
182}

183
184
185/////////////////////////////////////////////////
186//! 會話Session類特化
187////////////////////////////////////////////////
188template<>
189class Session<int>
190{
191
192
193}
;

寫的一個實現(xiàn)代碼:
 1// MySession.cpp : 定義控制臺應用程序的入口點。
 2#include "Session.h"
 3#include <ctime>
 4#include <map>
 5#include <iostream>
 6#include <windows.h>
 7using namespace std;
 8
 9#define TIMER    5         // 10秒鐘 5分鐘
10
11struct TData
12{
13    int  data;
14    long time;
15}
;                     // 數(shù)據(jù)包
16bool comp (const TData & _data , const TData & _tdata)
17{
18    return ( (_tdata.data == _data.data) && (_tdata.time == _data.time));
19}

20
21int _tmain(int argc, _TCHAR* argv[])
22{
23    Session<TData>  Sess(TIMER);
24    
25    for(int count = 0 ; count < 20 ; count ++)
26    {
27        TData tmp;
28        tmp.data = count +1;
29        tmp.time = time(NULL);
30        Sess.AddSession(tmp,TIMER);
31        cout << Sess <<endl;
32        Sleep(500);
33    }

34    return 0;
35}

36
37

posted on 2009-04-22 20:53 expter 閱讀(1449) 評論(1)  編輯 收藏 引用 所屬分類: 其他學習筆記工作筆記算法與數(shù)據(jù)結構

評論

# re: 關于會話記錄Session的實現(xiàn) 2009-04-28 13:30 guest

其實session在實際的開發(fā)中 運用非常廣。。
封裝好了很方便的,  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区三区视频在线观看| 欧美精品在线视频| 欧美a级一区二区| 久久久久国产精品一区| 久久精品国产999大香线蕉| 久久黄色影院| 亚洲精品国产品国语在线app| 久久香蕉国产线看观看av| 欧美黄色片免费观看| 一区二区三区黄色| 欧美在线不卡| 另类激情亚洲| 久久精品视频在线| 欧美激情第三页| 亚洲人成亚洲人成在线观看| 亚洲精品一区二区三区蜜桃久 | 欧美三级网页| 极品尤物av久久免费看| 亚洲婷婷在线| 麻豆精品精华液| 亚洲欧美日韩久久精品| 麻豆精品精华液| 在线成人av网站| 久久成人免费网| 一区二区三区高清在线观看| 久久精品91| 国产又爽又黄的激情精品视频| 日韩视频一区二区| 亚洲日本视频| 欧美日韩视频免费播放| 91久久亚洲| 亚洲片国产一区一级在线观看| 久久精品男女| 亚洲国产91| 亚洲第一福利在线观看| 欧美激情精品久久久久久蜜臀| 在线播放中文字幕一区| 久久精品青青大伊人av| 久久xxxx精品视频| 激情成人av| 亚洲激情成人在线| 国产精品久久久一区二区三区| 亚洲在线视频观看| 亚洲欧美日本精品| 狠狠色噜噜狠狠色综合久| 国产精品日韩专区| 久久久一二三| 欧美高清视频在线观看| 亚洲一区制服诱惑| 欧美91大片| 久热这里只精品99re8久| 欧美精品一区二区久久婷婷| 一区二区三区免费网站| 欧美在线视频网站| 亚洲欧美一区二区三区久久 | 亚洲欧美日韩在线播放| 国产色视频一区| 亚洲日本欧美日韩高观看| 国产日韩欧美高清免费| 亚洲国产美女| 在线欧美电影| 麻豆成人91精品二区三区| 亚洲日本一区二区| 亚洲永久精品大片| 精品动漫av| 欧美日韩免费一区二区三区视频 | 国产精品综合| 亚洲国产一区二区三区青草影视| 欧美日韩亚洲另类| 欧美.日韩.国产.一区.二区| 国产精品国产a级| 亚洲欧洲精品一区| 亚洲二区在线| 久久精品人人做人人爽| 性欧美精品高清| 国产精品亚洲片夜色在线| 欧美视频在线一区| 久久久久久久久久久成人| 欧美性大战久久久久| 一区二区三区www| 在线看片第一页欧美| 开心色5月久久精品| 亚洲国产精彩中文乱码av在线播放 | 午夜欧美精品| 伊人久久亚洲美女图片| 欧美人与性动交a欧美精品| 亚洲精品免费在线播放| 亚洲欧美日本另类| 亚洲国产精品va在线观看黑人| 欧美福利一区| 欧美综合激情网| 亚洲影院在线| 99国产一区| 亚洲激情视频| 亚洲国产成人一区| 麻豆国产精品va在线观看不卡| 一区二区三区四区五区视频 | 亚洲精品在线三区| 亚洲国产va精品久久久不卡综合| 亚洲欧美精品一区| 亚洲欧美日韩国产成人精品影院| 亚洲欧美高清| 免费看的黄色欧美网站| 欧美少妇一区| 国产自产精品| 国产小视频国产精品| 国产乱码精品一区二区三区av| 欧美日韩精品系列| 国产精品高清免费在线观看| 欧美激情小视频| 欧美日韩亚洲高清| 欧美日韩免费观看一区二区三区 | 亚洲国产综合91精品麻豆| 99re66热这里只有精品3直播| 国产人久久人人人人爽| 亚洲黄网站黄| 韩日午夜在线资源一区二区| 亚洲免费黄色| 亚洲福利视频一区| 亚洲欧美日韩成人| 正在播放亚洲| 欧美jizz19性欧美| 老司机亚洲精品| 国产欧美日韩在线| 一区二区福利| 99视频在线精品国自产拍免费观看 | 99精品国产99久久久久久福利| 久久国产手机看片| 欧美亚洲免费电影| 欧美日韩一区二区三区高清| 亚洲国产福利在线| 亚洲国产视频一区| 久久综合导航| 免费观看国产成人| 国产亚洲一级高清| 午夜欧美不卡精品aaaaa| 西西人体一区二区| 国产视频综合在线| 久久成人免费视频| 久久久久久黄| 国内在线观看一区二区三区| 欧美亚洲三区| 老司机午夜精品视频| 激情久久久久久| 免费影视亚洲| 日韩亚洲欧美高清| 香蕉久久国产| 国内外成人在线| 玖玖玖国产精品| 亚洲欧洲精品一区二区三区不卡| 亚洲免费av电影| 欧美日韩一区二区三区在线| 99精品欧美一区| 欧美在线观看视频在线| 伊人成人在线视频| 欧美精品播放| 亚洲影院免费观看| 美女黄网久久| 99视频国产精品免费观看| 欧美色欧美亚洲另类二区| 亚洲一区在线观看免费观看电影高清| 欧美一区二区三区播放老司机| 激情综合网址| 欧美日韩国产成人高清视频| 亚洲男人的天堂在线| 模特精品裸拍一区| 在线视频中文亚洲| 国产一区二区三区在线观看免费| 久久综合九色九九| 99精品欧美一区二区三区 | 一区二区三区成人| 国产精品伦理| 久久人人超碰| 亚洲图片在线| 欧美成人精品一区| 亚洲一区网站| 亚洲黄色尤物视频| 国产欧美一区二区三区在线老狼| 老司机一区二区| 亚洲伊人久久综合| 亚洲国产精品激情在线观看| 欧美一区二区大片| 日韩亚洲综合在线| 在线成人激情黄色| 国产精品网曝门| 欧美日韩精品一区二区| 久久精品视频网| 亚洲网站在线观看| 亚洲国产高清一区| 老妇喷水一区二区三区| 先锋影音久久久| 亚洲一区二区三区在线看| 在线电影一区| 国产视频在线观看一区| 欧美视频导航| 欧美三级午夜理伦三级中视频| 美国十次了思思久久精品导航| 欧美一区二区三区视频在线| 亚洲私人影院在线观看| 99精品久久久|