• 断线重连总结


    0.gateserver负责所有与客户端的直接连接

    m_conns[10000]也就是一个gateserver最多可以维持10000条socket连接,蓝月采用的是tcp
    行走各种消息都是tcp,不存在丢包一说,只会延迟

    每个客户端点击登录时会做以下事情
    建立socket tcp连接,向gateserver 的ip port发送请求,
    gateserver收到后,建立连接,这时候客户端与gateserver之间socket连接成功.
    gateserver将这个conn(gateserver与这个客户端的连接)加入m_conns中。

    1 gateserver与gameserver之间的通信

    用户登录成功,获取角色等过程暂时忽略,直接进入后面游戏协议
    客户端发送cm_game_pro 给gateserver,gateserver转发给gameserver
    这里每个user都有一个gameconn,这个连接表示此玩家gateserver与gameserver之间用的哪个连接

    2 gameserver的处理
    收到消息放到一个消息队列,单独线程轮训此消息队列,处理
    发过来的消息都会有index,这个字段表示的是,此玩家客户端对应的gateserver哪个连接,
    第一次时候gameserver此时还没有此玩家的记录
    gameserver维护一个m_users[10000]
    对每一个新来的连接index,分配对应的m_users[index]

    3 select,epoll,socket
    int ret = select(0, rfds, wfds, NULL, &m_timeout);
    这句话的意思就是,系统监听多个socket连接,发现那个有变化就会知道,具体暂时略过
    总之ret>0说明有了变化

    //大于0说明有消息可发
    //等于0说明异常,连接断开了

    之前的处理是,当异常,直接remove(pConn),然后处理一系列后续操作,玩家离线,登出等处理

    4 断线重连

    以上流程已经搞清楚了 断线重连也不难
    两种:断开连接重新登录,断开连接不需重新登陆

    当select/epoll send recv结果为0,本来连接直接断开的,现在保留60s
    因为手机环境下,打电话,移动网络等很大概率很频繁会出现断网,也就是socket完全断开的情况
    因此,断开不能理解就把整个connection remove掉,remove掉就是跟页游端玩家退出游戏一样,
    类似妖妖平台的DOTA,断开连接 会尝试连接,1分钟连不上那么就判断完全断开,结束游戏

    引用

    断线重连总结



  • 相关阅读:
    How to upload a file in MVC4
    安装升级System.Web.Optimization.dll
    Model Binding To A List
    TD中{text-overflow:ellipsis;} 用法
    表格
    CSS定位
    清除浮动的几种方式
    css浮动原理和特性
    前端规范
    块元素和内嵌元素
  • 原文地址:https://www.cnblogs.com/losophy/p/10584643.html
Copyright © 2020-2023  润新知