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

勤能補拙,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>
            亚洲人www| 亚洲精品无人区| 亚洲一区二区不卡免费| 亚洲国产第一页| 牛牛国产精品| 中日韩男男gay无套| 亚洲小视频在线观看| 国产精品夜夜嗨| 久久这里只有精品视频首页| 久久亚洲高清| 中文网丁香综合网| 欧美亚洲在线视频| 亚洲国产高清一区| 一本久道久久综合中文字幕| 国产精自产拍久久久久久| 欧美在线亚洲在线| 免费黄网站欧美| 性伦欧美刺激片在线观看| 欧美在线视频在线播放完整版免费观看| 精品91免费| 99riav国产精品| 黄色亚洲大片免费在线观看| 欧美激情一区三区| 国产精品久久久久久久久久久久久| 久久久av毛片精品| 欧美日本免费| 久久精品一区二区国产| 欧美美女福利视频| 久久午夜电影| 国产精品国码视频| 欧美黄色aa电影| 国产欧美一区二区精品秋霞影院| 欧美激情在线狂野欧美精品| 国产精品理论片| 亚洲丰满在线| 国一区二区在线观看| 亚洲免费高清| 亚洲日韩视频| 久久国产一区二区| 亚洲伊人伊色伊影伊综合网| 国产精品成人aaaaa网站| 久久全国免费视频| 国产精品a级| 亚洲激情第一区| 精品动漫3d一区二区三区| 亚洲一级网站| 亚洲色图制服丝袜| 欧美成人自拍| 欧美高清在线播放| 国产一区再线| 翔田千里一区二区| 欧美诱惑福利视频| 国产精品美女黄网| 亚洲午夜精品| 亚洲天堂激情| 欧美香蕉视频| 一区二区三区国产在线| 亚洲视频在线免费观看| 欧美黄色精品| 亚洲美女视频网| 亚洲老板91色精品久久| 久久综合九色综合网站| 你懂的国产精品| 在线欧美影院| 玖玖玖免费嫩草在线影院一区| 久久一二三国产| 国内激情久久| 久久久久久久尹人综合网亚洲| 久久久精品2019中文字幕神马| 国产日韩欧美一区二区三区四区 | 影音先锋亚洲电影| 欧美在线观看视频在线| 久久香蕉国产线看观看网| 韩日视频一区| 久久综合久色欧美综合狠狠| 欧美freesex交免费视频| 亚洲区一区二| 欧美日韩直播| 亚洲一区二区三区中文字幕| 欧美影院视频| 在线观看一区二区精品视频| 久久综合色影院| 亚洲人成毛片在线播放| 99国内精品久久| 国产精品日韩在线一区| 久久精品成人欧美大片古装| 牛夜精品久久久久久久99黑人| 91久久精品美女高潮| 国产精品白丝jk黑袜喷水| 亚洲免费影视| 欧美大片91| 亚洲欧美日韩精品久久奇米色影视 | 亚洲欧美成人一区二区三区| 国产日韩精品在线观看| 久久男人资源视频| 亚洲美女视频网| 玖玖玖免费嫩草在线影院一区| 亚洲三级观看| 国产欧美日韩亚洲一区二区三区| 欧美在线视频日韩| 日韩天堂在线视频| 久久久精品2019中文字幕神马| 亚洲精品一区二区三区福利| 国产精品亚洲美女av网站| 母乳一区在线观看| 最新国产の精品合集bt伙计| 欧美日韩在线精品一区二区三区| 久久精品国产77777蜜臀| 激情综合中文娱乐网| 欧美成人午夜激情| 亚洲欧美综合网| 欧美激情精品久久久六区热门| 亚洲综合色自拍一区| 精品二区视频| 国产精品v欧美精品∨日韩| 久久久久久久久伊人| 亚洲美洲欧洲综合国产一区| 久久综合国产精品| 亚洲一区制服诱惑| 亚洲国产免费| 国产一区二区无遮挡| 欧美日韩播放| 久久综合色播五月| 欧美一站二站| 亚洲图片在线观看| 亚洲精品在线一区二区| 另类专区欧美制服同性| 亚洲男人第一av网站| 亚洲精品一区二区三区婷婷月 | 香蕉久久夜色精品国产| 9i看片成人免费高清| 欧美激情影院| 欧美激情在线免费观看| 蜜臀久久99精品久久久久久9 | 亚洲四色影视在线观看| 亚洲国产精品久久久| 欧美a级大片| 免费精品99久久国产综合精品| 久久精品一本| 久久久久久久久综合| 久久se精品一区二区| 午夜在线视频一区二区区别| 亚洲欧美激情四射在线日| 亚洲无吗在线| 亚洲淫片在线视频| 亚洲尤物在线| 午夜欧美精品| 久久国内精品自在自线400部| 亚洲欧美高清| 性欧美18~19sex高清播放| 性久久久久久久| 久久久精品国产免大香伊| 久久久久久久久岛国免费| 久久人人超碰| 欧美激情一区二区三区全黄| 亚洲国产福利在线| 99re6这里只有精品视频在线观看| 日韩写真视频在线观看| 在线中文字幕一区| 亚洲欧美在线看| 久久亚洲国产成人| 欧美精品三级日韩久久| 欧美色一级片| 国产亚洲欧美aaaa| 1024成人网色www| 一本色道久久综合亚洲精品高清| 亚洲综合大片69999| 欧美在线影院在线视频| 欧美成人r级一区二区三区| 亚洲精品国产品国语在线app| 亚洲午夜av电影| 久久久久久精| 蜜臀av国产精品久久久久| 欧美激情精品久久久久久变态 | 亚洲精品裸体| 午夜宅男久久久| 美国十次成人| 国产精品福利av| 在线欧美视频| 亚洲免费婷婷| 亚洲高清免费视频| 亚洲综合成人在线| 男女av一区三区二区色多| 欧美网站在线观看| 亚洲国产欧美在线| 午夜在线电影亚洲一区| 欧美激情影音先锋| 午夜综合激情| 欧美日韩精品伦理作品在线免费观看| 国产精品一区二区久久国产| 在线观看亚洲专区| 欧美一区二区三区在线观看| 亚洲国产三级| 久久九九国产| 国产伦精品一区二区三区| 亚洲黄色成人| 久久字幕精品一区| 亚洲免费小视频| 欧美日本一区二区三区| 在线免费观看欧美|