zoukankan      html  css  js  c++  java
  • 多进程服务器架构

    最近哼哧的成果出炉啦,整合之前的c++工具类、网络库、半成品go服务器,http、tcp、udp,前端,后台轮一遍,组合出这套架构,一套完整解决方案哟,基础的启动、登录、数据库相关全实现了。

    有三个比较满意的地方:
    一、消息通信全被封装成了rpc形式,且无需手动注册,只要在枚举处声明并添加同名rpc_function即可自动调用。使用方便:
        前端接口形式:CallRpc(rpcName, sendFunc, recvFunc)
        后台响应函数:自带 recvBuf(由client写入的参数构成,按同样顺序读取)、backBuf(要回复对方的数据流,若有写入会自动发送,交由对端填入的 recvFunc 处理)

    二、 继承以前写的go多进程服务器优势,全部后台的连接关系由一份配表统一维护。非常容易改变连接关系、添加新的后台模块。
        统一的连接获取方式
            var g_cache_battle_conn *tcp.TCPConn
            func SendToBattle(msgID uint16, msgdata []byte) {
                if g_cache_battle_conn == nil {
                    g_cache_battle_conn = netConfig.GetTcpConn("battle", 0)
                }
                g_cache_battle_conn.WriteMsg(msgID, msgdata)
            }

        统一的网络服务创建方式
            func main() {
                common.LoadAllCsv()
                netConfig.RegMsgHandler() 

                gamelog.Warn("----Battle Server Start-----")
                if netConfig.CreateNetSvr("battle") == false {
                    gamelog.Error("----Battle NetSvr Failed-----")
                }
            }

    三、散列化玩家数据:按业务区分成块,各自独立处理,比如:邮件、任务、基础、战斗、VIP......各部分均可独立从数据库读出

     
    go服务器:https://github.com/3workman/GoServer
    c++战斗服:https://github.com/3workman/CXServer
    客户端网络模块: https://github.com/3workman/Tools/tree/master/c%23/Net

  • 相关阅读:
    ExplorerControls的显示问题
    VS选项中没有C#相关设置选项?
    根据点提取栅格值
    原来我的代码暴露在外面!
    .NET反编译之manager,base.AutoScaleMode修复
    无法加载Dll”ArcGISVersion.dll”:0x8007007E
    ArcEngine9.3迁移至ArcObject10.1
    地籍宗地出图(二)
    地籍宗地出图(一)
    CAD设置图层透明显示
  • 原文地址:https://www.cnblogs.com/3workman/p/6750491.html
Copyright © 2011-2022 走看看