All Projects → davyxu → Cellmesh

davyxu / Cellmesh

Licence: mit
Game server framework based on cellnet

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Cellmesh

Ark
ARK is a lightweight, agility, elastic, distributed plugin framework written in C++,make it easier and faster to create your own application service.
Stars: ✭ 370 (+19.35%)
Mutual labels:  framework, game, gameserver
Aerogameframework
AeroGameFramework is a Roblox game framework that makes development easy and fun. The framework is designed to simplify the communication between modules and seamlessly bridge the gap between the server and client.
Stars: ✭ 150 (-51.61%)
Mutual labels:  framework, game
Sarl
SARL Agent-Oriented Programming Language http://www.sarl.io
Stars: ✭ 103 (-66.77%)
Mutual labels:  framework, agent
Haxegon
A haxe programming library for beginners. Powered by OpenFL and Starling.
Stars: ✭ 182 (-41.29%)
Mutual labels:  framework, game
Engine
C++11 and SDL2 lightweight 2d game framework
Stars: ✭ 71 (-77.1%)
Mutual labels:  framework, game
Bdframework.core
[中]Simple! Easy! Powerful Unity3d game workflow! Unity3d framework:c# hotfix(ILRuntime)、asset manager、ui workflow、network debug... and so on
Stars: ✭ 1,196 (+285.81%)
Mutual labels:  framework, game
Htframework
Unity HTFramework, a rapid development framework of client to the unity.
Stars: ✭ 179 (-42.26%)
Mutual labels:  framework, game
Easy Php
A Faster Lightweight Full-Stack PHP Framework 🚀
Stars: ✭ 754 (+143.23%)
Mutual labels:  framework, gateway
Pydark
PyDark is a 2D and Online Multiplayer video game framework written on-top of Python and PyGame.
Stars: ✭ 201 (-35.16%)
Mutual labels:  framework, game
Awesome Haxe Gamedev
Resources for game development on haxe
Stars: ✭ 213 (-31.29%)
Mutual labels:  framework, game
opsbro
Ops Best friend
Stars: ✭ 37 (-88.06%)
Mutual labels:  agent, service-discovery
Unity Core Project
Core Framework for Unity
Stars: ✭ 42 (-86.45%)
Mutual labels:  framework, game
Coaty Js
Collaborative IoT framework in JavaScript/TypeScript for Node.js and browsers.
Stars: ✭ 39 (-87.42%)
Mutual labels:  framework, agent
Bige
游戏服务器框架。
Stars: ✭ 76 (-75.48%)
Mutual labels:  framework, game
Loxodon Framework
An MVVM & Databinding framework that can use C# and Lua to develop games
Stars: ✭ 802 (+158.71%)
Mutual labels:  framework, game
Fxgl
Stars: ✭ 2,378 (+667.1%)
Mutual labels:  framework, game
Linuxgsm
The command-line tool for quick, simple deployment and management of Linux dedicated game servers.
Stars: ✭ 3,063 (+888.06%)
Mutual labels:  game, gameserver
Lgame
A cross-platform Java game Engine (Framework) , support JavaFX / Android / IOS / HTML5 / Linux / MAC / Windows
Stars: ✭ 467 (+50.65%)
Mutual labels:  framework, game
Jengine
JEngine是针对Unity开发者设计的开箱即用的框架,封装了强大的功能,小白也能快速上手,轻松制作可以热更新的游戏 | JEngine is a streamlined and easy-to-use framework designed for Unity Programmers which contains powerful features, beginners can start up quickly and making hot update-able games easily
Stars: ✭ 564 (+81.94%)
Mutual labels:  framework, game
Chunkstories
Somewhat fancy blocky game engine written in Kotlin
Stars: ✭ 199 (-35.81%)
Mutual labels:  framework, game

Build Status Go Report Card MIT licensed GoDoc

cellmesh

基于cellnet的游戏服务框架

特点

Based On Service Discovery(基于服务发现)

通过服务发现自动实现服务互联,探测,挂接.无需配置服务器间的端口.

Cloud Config File(云配置文件)

任何服务器配置均通过服务发现的KV存取,本地不保存配置,更新配置更为方便

Code Generation(代码生成)

基于github.com/davyxu/protoplus的代码生成技术,迅速粘合逻辑与底层,代码好看易懂且高效.

使用更简单更强大的schema编写协议, 并自动生成protobuf schema.

Transport based on cellnet(基于cellnet的网络传输)

提供强大的扩展及适配能力.

使用cellmesh

cellmesh 使用go module管理源码依赖, 所以确保go版本在1.12以上

下载cellmesh源码

    go get github.com/davyxu/cellmesh

cellmesh demo

demo工程请参见

https://github.com/davyxu/cellmesh_demo

Demo包含服务进程及工具配套等

服务发现(memsd)

服务启动方法

    go run github.com/davyxu/cellmesh/discovery/memsd

服务启动参数

  • datafile 开启持久化,默认每隔1分钟将内存数据落地到指定的datafile中,格式为JSON

  • addr 按给定的地址侦听,例如memsd -addr=localhost:9099

memsd客户端功能

客户端通用参数

  • addr 连接指定地址的服务发现, 例如:-addr=localhost:9099

查看注册的服务

   go run github.com/davyxu/cellmesh/discovery/memsd -viewsvc

清空注册的服务

   go run github.com/davyxu/cellmesh/discovery/memsd -clearsvc

查看配置的key

   go run github.com/davyxu/cellmesh/discovery/memsd -viewkey

获取配置值

    go run github.com/davyxu/cellmesh/discovery/memsd -getvalue <key>

设置配置值

   go run github.com/davyxu/cellmesh/discovery/memsd -setvalue <key> <value>

删除配置值

   go run github.com/davyxu/cellmesh/discovery/memsd -deletevalue <key>

清空配置

   go run github.com/davyxu/cellmesh/discovery/memsd -clearvalue

概念

Service(服务)

一个Service为一套连接器或侦听器,挂接消息处理的派发器Dispatcher

  • 侦听端口自动分配

    Service默认启动时以地址:0启动,网络底层自动分配端口,由cellmesh将服务信息报告到服务发现

    其他Service发现新的服务进入网络时,根据需要自动连接服务

Connection Management(连接维护)

从服务发现的服务信息,创建到不同服务间的长连接。同时在这些连接断开时维护连接

逻辑中根据策略从已有连接及信息选择出连接与目标通信,例如:选择负载最低的一台游戏服务器

目录结构

discovery
   kvconfig
      配置的快速获取接口。
   memsd
      面向游戏优化的服务发现实现。
service
   服务通信基础,以及服务发现封装。
tool
   protogen
      协议生成器,生成Go的消息绑定以及消息响应入口。   
util
   所有框架通用的工具代码。

服务参数

service包为服务进程提供命令行参数支持。服务进程的命令行参数同时也可以使用FlagFile像使用配置文件一样批量设置进程配置(参考demo/cfg/LocalFlag.cfg)

详细参数说明如下:

  • sdaddr

    指定服务发现服务器(memsd)地址, 通过服务发现,服务器可以快速获取配置以及其他可连接服务器地址,实现服务互联.

  • svcgroup

    指定服务器分组. 一般情况下,认为一台物理机归属于一个svcgroup. 当然,也可以在一台物理机上放置多个分组,比如开发阶段.

    服务器分组也能方便服务器打包以及定位服务器位置.

  • svcindex

    指定服务器索引, 标识同类服务器的多个不同进程,同类中的svcindex必须唯一,逻辑上,svcindex还会与uuid关联.

  • wanip

    指定服务器所在物理机的外网IP,方便通知客户端要连接的IP,例如:login通知客户端game的外网IP.

  • logcolor

    对日志着色, 规则参见github/davyxu/golog中的color.go, 写入文件时,请关闭此选项,避免日志中出现着色字符.

  • logfile

    将日志写入文件,并不再输出到控制台.

  • logfilesize

    指定输出日志文件单个大小,可使用B/M/G标识, 注意: golog默认不是rolling方式,日志会写入到尾数最大的日志文件.

  • loglevel

    指定日志输出级别, 格式 日志名|级别, 日志名支持正则表达式, 级别可以为error, info等

  • mutemsglog

    屏蔽指定消息的日志,多个消息使用'|'分割

  • flagfile

    使用FlagFile格式(参考 LocalFlag),作为进程的命令行参数

Tips

为什么使用memsd的服务发现替换consul?

早期版本的cellmesh使用consul作为服务发现,cellmesh使用主动汇报服务信息的方式保证consul中能及时更新服务信息。 但实际使用中发现有如下问题:

  1. 偶尔出现高CPU占用,Windows休眠恢复后也会造成严重的高CPU现象。
  2. consul的API并没有本地cache,需要高速查询时,并没有很好的性能。
  3. 多服更新时没有原子更新,容易形成严重的不同步现象。
  4. 依赖重,代码量巨大,使用vendor而不是go module方式管理代码,编译慢。 基于以上考虑,决定兼容服务发现接口,同时编写对游戏服务友好的发现系统:memsd。

备注

感觉不错请star, 谢谢!

知乎: http://www.zhihu.com/people/sunicdavy

提交bug及特性: https://github.com/davyxu/cellmesh/issues

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].