首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

頁遊/手遊服務器架構設計(一):Lua腳本層與C/C++網絡、數據庫擴展

     編輯:關於C語言

遊戲服務器架構實戰(一):Lua業務層 + C/C++核心擴展

本文總結多年頁遊/手遊服務器開發經驗,採用Lua腳本驅動業務邏輯,C/C++實現高性能網絡通訊與數據庫訪問兩大核心擴展的架構模式。

架構分層

+--------------------------+
|      Lua Script Layer    |  <-- 業務邏輯、協議處理、配置熱更
+--------------------------+
|    C/C++ Extension Layer |  <-- Net(epoll/kcp) + DB(mysql/redis driver)
+--------------------------+
|       OS / Hardware      |
+--------------------------+

網絡模塊接口設計 (libev/libuv風格)

客戶端發起連接

// 返回 net 對象,支援異步回調
Net* _connect(const char* ip, int port,
              void (*on_connect)(Net*, Net*),
              void (*on_close)(Net*, const char*),
              int timeout_ms);

服務端監聽

Net* _listen(const char* ip, int port,
             void (*on_connect)(Net*, Net*),
             void (*on_close)(Net*, const char*),
             int timeout_ms);

Net 對象核心方法

void net_receive(Net* n, int sep1, int sep2, int sep3, int maxlen, void (*on_recv)(Net*, const char*));
void net_send(Net* n, const char* data, int len);
void net_close(Net* n);

協議約定:長度前綴 + 消息體

// 4字節大端長度 + len字節消息體
// 服務端典型收包邏輯
void on_head(Net* n, const char* data) {
    uint32_t len = ntohl(*(uint32_t*)data);
    net_receive(n, len, on_body); // 繼續讀取消息體
}
void on_body(Net* n, const char* data) {
    // 解析處理業務包
    net_receive(n, 4, on_head);   // 循環等待下一個包頭
}
void on_connect(Net* n, Net* s) { net_receive(n, 4, on_head); }
void on_close(Net* n, const char* msg) { printf("closed: %s\n", msg); }

// 啟動監聽
Net* server = _listen("0.0.0.0", 8080, on_connect, on_close, 60000);

客戶端發送流程

Net* client = _connect("server_ip", 8080, on_connect, on_close, 60000);
net_send(client, &len, 4);  // 發送長度
net_send(client, body, len); // 發送消息體

技術選型說明

  • 網絡庫:基於libiop二次開發,適配自定義協議與回調模型。
  • 數據庫:C/C++封裝MySQL/Redis驅動,提供異步接口供Lua調用。
  • 序列化:Lua端使用Protocol Buffers或自定義二進制編解碼。
精華在Lua業務層,C/C++只做「薄而快」的基礎設施。後續文章將詳細拆解Lua協議分發、熱更、數據庫連接池等核心模塊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved