zoukankan      html  css  js  c++  java
  • 项目分析(channelid是如果产生的)

    channelid如何生成的
    ///////////////////////////////////////////////////////////////
    //
    // I_TCPServer.h                   
    // Description:    
    //    
    ///////////////////////////////////////////////////////////////
    #pragma once
    #ifndef _ChannelIDGenerator_H
    #define _ChannelIDGenerator_H
    
    #include <queue>
    #include <windows.h>
    class ChannelIDGenerator
    {
    public:
        ChannelIDGenerator()
        {
            m_size = 0;
        };
        ~ChannelIDGenerator(){};
    
    private:
        std::queue<int> m_ids;
        int m_size;
    public:
        void init(int start, int size)
        {
            if(m_size)
                MessageBox(NULL, L"init m_size超出范围", L"重大错误freeId(int id)", MB_OK);
            m_size = size;
            for (int i = start; i < start + m_size; i++)
            {
                m_ids.push(i);
            }
        }
        int getId()
        {
            if(m_ids.empty())
                return -1;
            int id = m_ids.front();
            m_ids.pop();
            return id;
        }
        void freeId(int id)
        {
            if(id < 0 || id > m_size)
                MessageBox(NULL, L"channel id超出范围", L"重大错误freeId(int id)", MB_OK);
            m_ids.push(id);
            if((int)m_ids.size() > m_size)
            {
                MessageBox(NULL, L"channel id超出范围", L"重大错误freeId(int id)", MB_OK);
                int debug = 0;
            }
        }
        int getSize()
        {
            return m_size;
        }
    };
    
    #endif
    可以看出这个channelid是由队列中产生的
    刚开始的时候插入12000个,每连接一个玩家的时候从front一个,每下线一个会push一个
    刚开始的时候我以为这个队列不会乱,但发现会乱的,但这个没关系只要不会出现两个玩家的channelid一样就行了
    如果上线的玩家大于12000的时候,我实验了一下发现每次front的时候都是-1,所以这个会造成channelid会重复,而服务器发送消息就是通过这个channelid发送的肯定会出错
  • 相关阅读:
    计算机书籍.网址
    MVC是必知必用的
    技术
    三色旗帜分类
    巴斯卡三角形
    Centos安装wine等组件的问题
    some software that is used to speed up your system
    驾照考试系统之流程图
    用静态成员函数调用非静态成员变量
    MFC 进度条控件
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3893444.html
Copyright © 2011-2022 走看看