专栏首页I0gangsky简易高性能游戏服务器框架库1
原创

gsky简易高性能游戏服务器框架库1

有时候方便自己快速开发小游戏服务器,自己采用go,python,c#那些也简单写过一点游戏后台,但是针对与socket长连接,感觉有点不太好控制,go稍微好些,这个项目是以前写的web服务器,最近在搞游戏项目,把它移植为一个库,且采用psp(pwnsky protocol)二进制传输协议更快速应对客户请求。

github链接: https://github.com/pwnsky/gsky

若有师傅们想参与一起完善维护的可以私信我: QQ: 418894113。

下面是一些简单的使用例子,后期得把文档完善一下。

介绍

为了便于更快速开发高性能游戏服务器,特意基于lgx web服务器框架,二次开发且封装为一个服务器库。 gsky是一个基于epoll架构的高性能游戏服务器库,采用更快速的psp (pwnsky protocol)二进制协议进行传输数据。

如何使用?

git clone https://github.com/pwnsky/gsky.git
cd gsky
make -j # 编译gsky库
make install # 安装gsky库

该库提供编译好的.so文件以及api头文件,更利于开发和编译服务器。

编译成功后,所有文件在build目录下,如下。

build
├── include
│   └── gsky
│       ├── gsky.hh # gsky服务器总声明
│       ├── log # 日志模块
│       │   ├── log.hh
│       │   └── log_thread.hh
│       ├── net # 网络模块
│       │   ├── channel.hh
│       │   ├── epoll.hh
│       │   ├── eventloop.hh
│       │   ├── eventloop_thread.hh
│       │   ├── eventloop_threadpool.hh
│       │   ├── net.hh
│       │   ├── psp.hh
│       │   └── util.hh
│       ├── server.hh
│       ├── thread # 线程模块
│       │   ├── condition.hh
│       │   ├── count_down_latch.hh
│       │   ├── mutex_lock.hh
│       │   ├── noncopyable.hh
│       │   └── thread.hh
│       ├── util # 工具模块
│       │   ├── firewall.hh
│       │   ├── json.hh
│       │   ├── md5.hh
│       │   ├── url.hh
│       │   ├── util.hh
│       │   └── vessel.hh
│       └── work # 逻辑调用模块
│           └── work.hh
└── lib
    └── libgsky.so # 编译好的gsky动态库

详情请查看头文件api。

编译安装好库之后,可以更方便的写游戏服务器了。

例如: https://github.com/pwnsky/gsky/blob/main/example/server_1.cc

// g++ main.cc -lpthread -lgsky -o gsky
// ./gsky -c ../conf/gsky.conf
//
#include <iostream>
#include <signal.h>
#include <unistd.h>

#include <gsky/gsky.hh>
#include <gsky/server.hh>
#include <gsky/work/work.hh>

#define UNUSED(var) do { (void)(var); } while (false)

//extern std::string gsky::data::config_path;
//
std::string gsky::data::os_info;
gsky::server server;

void gsky_exit(int s) {
    UNUSED(s);
    server.stop();
}

void help() {
    std::cout << "Usage: ./gsky [OPTION...] [SECTION] PAGE...\n"
                "-c   load configure file\n"
                "-h   help of gsky server\n"
                "-v   check version of gsky server\n"
                 ;
}

enum class RouterRoot {
    Keep = 0,
    CheckUpdate,
    Login,
};

// 服务器回调函数, 函数格式为 void func(gsky::work::work *)
void server_run(gsky::work::work *w) {

    switch((RouterRoot)w->router_[0]) {
        case RouterRoot::Keep: {
            w->send_data("Keep"); // 发送给客户端"Keep"字符串
        } break;
        case RouterRoot::CheckUpdate: {
            std::cout << "checking updateing\n";
        } break;
        case RouterRoot::Login: {
            std::cout << "Login\n";
        } break;
        default: {
            w->send_data(w->content_.to_string()); // 回显输入的内容
        } break;
    }
}

int main(int argc, char **argv) {
    ::signal(SIGINT, gsky_exit); // Ctrl + c 退出服务器
    int opt = 0;
    gsky::data::config_path = DEFAULT_CONFIG_FILE;
    while((opt = getopt(argc, argv,"h::v::a::c:"))!=-1) {
        switch (opt) {
        case 'h': {
            help();
            exit(0);
        } break;
        case 'c': {
            // 设置服务器配置文件路径
            server.set_config_path(optarg);
        } break;
        case 'v': {
            // 显示 gsky lib 的版本号
            std::cout << "gsky version: " << gsky::version() << '\n';
            exit(0);
        } break;
        default: {
            std::cout << "-h get more info" << std::endl;
            exit(0);
        }
        }
    }

    // 设置服务器回调函数
    server.set_func_handler(server_run);
    server.run(); // 启动gsky服务器
    std::cout << "\033[40;33mgsky quited! \n\033[0m";
    return 0;
}

编译的时候

g++ -lgsky -lpthread main.cc

运行该程序需要指定下配置文件,一般常用配置文件在https://github.com/pwnsky/gsky/blob/main/conf/gsky.conf

{
    "protocol": "psp",
    "port" : 8080,
    "number_of_thread": 4,
    "log" : "./gsky.log",
    "firewall" : {
    }
}

设置好配置文件之后加上-c参数指定配置文件路径

./gsky -c ../conf/gsky.conf

若出现

gsky server port: 8080  number of thread: 4

则说明运行成功了。

测试服务器

由于服务器采用psp协议进行传输的,使用example/client.py进行测试,若想使用psp协议客户端,则访问https://github.com/pwnsky/psp下载相应的客户端psp协议库。

./client.py
send...
recv: 
router: b'\x00\x00\x00\x00' length: 4
b'Keep'

若运行出现以上内容,则服务器正常运行了。

详情更多,请看测试目录下的例子。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gsky游戏服务器框架2

    这几天主要是完善 pp (pwnsky protocol)二进制加密传输协议,还有该框架的拓展性。

    i0gan
  • 为什么决定要重新造一个轮子?

    目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,...

    李海彬
  • Golang语言社区--游戏服务器开发都要学什么

    大家好,我是Golang语言社区(www.golang.ltd)主编彬哥,本篇给大家转载一篇关于游戏服务器开发都要学什么的文章;主要帮助初学者了解下游戏服务器都...

    李海彬
  • 服务器架构分析

    1、Skynet 云风开源的基于actor 的开源引擎,脚本语言是lua,有不少公司在用,优势就是上手容易。

    香菜聊游戏
  • 腾讯互娱开源分布式开发框架 Pebble

    现代游戏项目中,为了让更多的玩家能在一起玩,游戏服务器所需要承载的在线玩家数量越来越多。同时为了让游戏更好玩,越来越多复杂的业务逻辑都需要放在游戏服务器端上运行...

    韩伟
  • Python计算生态36个代表库功能小结

    好派笔记
  • 11 一种高性能网络游戏服务器架构设计

    网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制...

    范蠡
  • ### 0x01 C++ 资源大全

    关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。

    上善若水.夏
  • 揭秘游戏服务器,不看后悔!!!

    《摩尔庄园》前段时间上线,  持续超出市场预期,相信也有不错的收益。游戏好玩,所有玩家看到了前端,但是做一款游戏,离不开后台游戏服务器的支持,服务器都要做什么,...

    香菜聊游戏
  • 值得推荐的C/C++框架和库 (真的很强大)

    Webbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以...

    诸葛青云
  • 值得推荐的C/C++框架和库(真的很强大)

    Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以...

    C语言与CPP编程
  • 2020年 Python学习路线及学习目标规划 拿走不谢!

    找不到完整的学习路线?小编分享2020年Python学习路线及学习目标规划拿走不谢,Python作为今年来特别受欢迎的编程语言,是AI时代头牌语言AI领域的敲门...

    python学习教程
  • H2Engine服务器引擎介绍

    H2Engine服务器引擎介绍 简介   H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适。因为它封装的功能非常精简,但是提供...

    知然
  • Python学习路线与生态

    1、turtle -基本图形绘制 2、string -字符串处理 3、math -基础...

    LeviMaster
  • 论可复用的游戏服务器端开发框架(一)

    本文试图以游戏服务器端开发的角度,探讨在需求高度变化的环境下,可重用模块构建的可能性和基本方案。 可复用框架的必要性与可行性 在现代游戏产品的开发中,游戏服务...

    韩伟
  • [Go语言]一种用于网游服务器的支持多路复用的网络协议处理框架

    简介: 本文描述了使用Go语言实现的、适应于Go语言并发模型的一种支持多路复用的网络协议处理框架,并提供了框架的代码实现。作者将这种框架用于网络游戏服务器中的协...

    李海彬
  • [Go语言]一种用于网游服务器的支持多路复用的网络协议处理框架

    简介: 本文描述了使用Go语言实现的、适应于Go语言并发模型的一种支持多路复用的网络协议处理框架,并提供了框架的代码实现。作者将这种框架用于网络游戏服务器中的协...

    李海彬
  • 零基础学Python,越早明白这些,越快找到好工作!

    读者A:自学python一年,用于写网络爬虫,但一直觉得自己对python理解还很低层。现在大三,打算再用一年时间学习python,让自己对这们语言有真正的理解...

    一墨编程学习
  • (转载非原创)一个java页游服务器框架

    只是觉得写的很好分享到腾讯云,推荐腾讯云服务器,除学生机外非常便宜的活动 腾讯云活动

    xlj

扫码关注云+社区

领取腾讯云代金券