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

勤能補拙,Expter

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

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

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

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

       感覺起來像一個定時器,其實可以設(shè)置每個數(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    // 默認(rèn)構(gòu)造函數(shù)
 20    Session()
 21        :M_lMaxHoldTime(MAXTIME)
 22        ,M_bAllowOverlay(FLAGLAY)
 23    {}
 24
 25    // 構(gòu)造函數(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    // 如果不想使用構(gòu)造時定義的有效保持時間,可以根據(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    // 處理以及超時的結(jié)點,然后刪除
140    void  DealOutTime(long Now_time)
141    {
142        // Mlist_Session有序列表,結(jié)束時間從前向后排列,
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;// 會話結(jié)束時間      
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 : 定義控制臺應(yīng)用程序的入口點。
 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 閱讀(1445) 評論(1)  編輯 收藏 引用 所屬分類: 其他學(xué)習(xí)筆記工作筆記算法與數(shù)據(jù)結(jié)構(gòu)

評論

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

其實session在實際的開發(fā)中 運用非常廣。。
封裝好了很方便的,  回復(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>
            久久精品国产一区二区电影| 国产精品日韩欧美一区| 久久夜色精品| 欧美一区二区三区在线观看| 欧美国产第一页| 免费精品视频| 国产精品视频网站| 欧美精品国产精品| 亚洲一区尤物| 久久久噜噜噜久久人人看| 欧美视频日韩视频| 亚洲图片激情小说| 久久亚洲综合| 日韩一级欧洲| 欧美午夜在线视频| 亚洲三级影院| 亚洲一区二区三区在线| 国产精品免费小视频| 久久亚洲一区| 欧美激情亚洲另类| 在线看日韩欧美| 香蕉久久夜色精品国产| 一卡二卡3卡四卡高清精品视频| 欧美激情日韩| 国产一区二区视频在线观看| 欧美日韩一区二区在线播放| 久久福利视频导航| 亚洲一区二区三区乱码aⅴ| 久久成人资源| 韩国一区电影| 亚洲第一页自拍| 久久国产精品99国产精| 在线视频你懂得一区| 一二三区精品福利视频| 亚洲人成网在线播放| 一区二区三区国产精华| 能在线观看的日韩av| 国产精品日韩欧美| 香蕉久久夜色精品| 国产精品99久久久久久久vr | 亚洲小视频在线| 欧美激情亚洲激情| 欧美激情第一页xxx| 亚洲美女在线看| 欧美一区二区三区视频| 亚洲精选久久| 国产伦精品一区二区三区四区免费 | 韩国成人福利片在线播放| 欧美一区二区三区四区在线观看地址 | 亚洲欧美日韩第一区| 美日韩精品免费观看视频| 久久精品国产77777蜜臀| 国产欧美一区二区精品秋霞影院| 欧美日韩dvd在线观看| 久久精品最新地址| 免费观看日韩| 亚洲精品在线看| 在线视频欧美一区| 一区二区三区日韩在线观看| 一区二区三区视频在线观看| 欧美日韩精品国产| 亚洲一区亚洲| 欧美freesex交免费视频| 久久综合图片| 久久久水蜜桃av免费网站| 亚洲久色影视| 欧美午夜一区| 欧美一区二区视频网站| 性色av香蕉一区二区| 欧美福利小视频| 裸体丰满少妇做受久久99精品 | 久久精品成人一区二区三区蜜臀| 国产精品免费电影| 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久久久久久久| 欧美亚洲成人免费| 久久精品午夜| 欧美日韩国产综合新一区| 久久精品国产99国产精品| 欧美大片va欧美在线播放| 国产精品日韩在线观看| 久久综合激情| 国产精品高潮呻吟久久| 久久天天躁夜夜躁狠狠躁2022| 欧美精品三级| 亚洲欧美一区二区三区在线| 久久综合给合| 国内成人在线| 欧美在线亚洲在线| 欧美国产视频日韩| 亚洲伊人一本大道中文字幕| 性欧美videos另类喷潮| 在线精品观看| 一本色道婷婷久久欧美| 亚洲国内精品| 久久三级视频| 国产最新精品精品你懂的| 久久五月天婷婷| 国产精品色午夜在线观看| 精品999日本| 欧美一区二区三区在线观看视频| 欧美国产在线视频| 欧美成人一区二区三区在线观看| 国产精品成人久久久久| 亚洲视频精品| 亚洲一区二区欧美日韩| 欧美日韩精品一区二区三区四区| 亚洲国产欧美国产综合一区 | 嫩模写真一区二区三区三州| 一本色道久久精品| 亚洲一区二区三区高清不卡| 午夜精品三级视频福利| 国产伦精品一区| 亚洲欧美日韩精品一区二区| 美女视频网站黄色亚洲| 亚洲第一区在线| 欧美成人一区二区三区在线观看| 亚洲日本免费电影| 99热在线精品观看| 国产精品视频自拍| 毛片一区二区三区| 亚洲一区二区三区免费在线观看 | 欧美在线观看天堂一区二区三区| 伊人久久大香线| 久久久国产视频91| 亚洲手机成人高清视频| 欧美成人精品福利| 欧美激情影音先锋| 亚洲欧洲一区二区天堂久久| 久久国产视频网站| 一区二区av| 亚洲激情av在线| 亚洲免费观看高清完整版在线观看熊 | 亚洲国产合集| 欧美午夜电影网| 韩国自拍一区| 欧美日韩日日骚| 欧美日韩一区二区三区| 亚洲字幕在线观看| 一区二区欧美在线观看| 裸体歌舞表演一区二区| 亚洲视频在线二区| 国产性猛交xxxx免费看久久| 欧美精品一区三区在线观看| 欧美国产精品va在线观看| 久久久久国产精品人| 欧美成人国产| 久久精品国产清自在天天线 | 一本色道久久综合亚洲二区三区| 理论片一区二区在线| 美女任你摸久久| 麻豆精品网站| 欧美日韩在线播放三区| 欧美日韩免费看| 国产精品普通话对白| 欧美视频一区二区三区…| 国产精品系列在线播放| 亚洲第一黄色| 欧美一级夜夜爽| 伊人久久亚洲影院| 亚洲人成网站色ww在线| 欧美国产日本| 亚洲欧美日韩国产综合在线| 制服诱惑一区二区| 免费短视频成人日韩| 国产日韩在线一区二区三区| 国产一区再线| 久久精品国产免费| 91久久国产精品91久久性色| 亚洲天堂网在线观看| 久久精品99国产精品| 亚洲视频在线观看一区| 欧美一级精品大片| 国产精品久久久一区二区三区| 伊人成人网在线看| 欧美黄色网络| 久久精品1区| 国产在线精品二区| 久久精品国产亚洲一区二区三区| 亚洲精品中文字幕在线观看| 久久久久国产免费免费| 亚洲电影在线看| 欧美a级大片| 久久久久91| 日韩午夜视频在线观看| 亚洲精品1区2区| 欧美日韩视频在线一区二区 | 亚洲电影专区| 欧美黄色一级视频| 亚洲韩国日本中文字幕| 亚洲精品欧美激情| 欧美日韩高清在线观看| 制服诱惑一区二区| 欧美自拍偷拍午夜视频| 欧美理论在线播放| 亚洲欧洲精品一区二区三区波多野1战4 | 久久天堂精品| 国产精品自拍三区| 亚洲欧洲在线播放| 一区二区亚洲精品|