Git Product home page Git Product logo

kiss's Introduction

KISS - Keep It Simple & Stupid

MIT licensed Go Report Card

  • KISS原则 是指在设计当中应当注重简约的原则

  • 作者水平有限,欢迎交流和指点,qq群: 817937655

安装

  • go get github.com/nothollyhigh/kiss/...

KISS可以用来做什么?

  • 有的人喜欢"框架"这个词,KISS的定位是提供一些基础组件方便搭积木实现架构方案,组件不限于项目类型

  • 作者主要从事游戏和web服务器开发,常用来构建游戏服务器,一些示例:

  1. 单进程服务器示例
  1. kissgate网关,支持kiss格式的tcp/websocket连接反向代理到tcp服务,支持线路检测、负载均衡、realip等,常用来做游戏集群的网关,kiss协议格式详见 net包
  1. 集群是不同功能服务的拆分和实现,每个游戏的需求都可能不一样,请根据实际需求自行设计和实现

KISS组件包简介

  1. Tcp 可以用做游戏服务器,支持自定义协议格式、压缩、加密等

  2. Websocket 可以用做游戏服务器,支持自定义协议格式、压缩、加密等

  3. Rpc 可以灵活使用任意序列化、反序列化,给用户更多自由,如protobuf、json、msgpack、gob等 支持服务端异步处理,服务端不必须在方法中处理完调用结果,可以异步处理结束后再发送结果 不像GRPC等需要生成协议、按格式写那么多额外的代码,用法上像写 net/http 包的路由一样简单

  4. Http 支持优雅退出、pprof等

  • 自己实现 log 包之前,我简单尝试过标准库的 log 和一些三方的日志包,但是对日志文件落地不太友好, 比如日志文件按目录拆分、文件按时间和size切分、日志位置信息等

  • KISS 的 log 包日志支持:

  1. 日志位置信息,包括文件、行数
  2. 支持文件日志,支持bufio
  3. 文件日志按时间拆分目录
  4. 文件日志按时间格式切分
  5. 文件日志按size切分
  6. 支持钩子对日志做结构化或其他自定义处理

三、sync包

  • 开启debug支持死锁告警 web相关无状态服务通常不需要锁,游戏逻辑多耦合,不小心可能导致死锁,可以用这个包来排查

  • WaitSession用法类似标准库的WaitGroup,但是可以指定session进行等待,支持超时

  • 详见 sync

  • 标准库的 time.AfterFunc 触发时会创建一个协程来调用回调函数,大量定时器短时间内集中触发时开销较大

  • KISS 的 timer 是小堆实现的,一个实例只需要一个协程就可以管理大量定时器,支持同步异步接口 主要用于优化标准库 time.AfterFunc 的协程开销,但要注意线头阻塞的问题 耗时较长的定时器回调建议仍使用 time.AfterFunc

  • 详见 timer

  • 进程内的发布订阅组件,观察者模式,可以用于模块间解耦

  • 详见 event

  • 最常用的 Go,HandlePanic,Safe,处理panic,打印异常调用栈信息

  • Workers,任务池,用于控制一定数量的协程异步处理任务 WorkersLink,也是任务池,但在Workers基础上做了一点扩展,支持异步处理的顺序组装

  • Qps,方便统计、打印一些qps功能

  • 详见 util

kiss's People

Contributors

nothollyhigh avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.