GithubHelp home page GithubHelp logo

wsuncle / lockstepserver Goto Github PK

View Code? Open in Web Editor NEW

This project forked from byebyebruce/lockstepserver

0.0 0.0 0.0 102 KB

golang版帧同步服务器

License: GNU General Public License v3.0

Go 96.36% Shell 0.26% HTML 3.38%

lockstepserver's Introduction

Lock Step Server

GoDoc Build Status Go Report

用golang写的帧同步服务器,目标是作为一个可以横向扩展,完全脱离玩法逻辑的帧同步服务器。

特性

  • 采用KCP(可根据需求改成其他协议)作为网络底层
  • 采用帧同步方式
  • protobuf作为传输协议
  • 支持断线重连

运行example server

  1. 启动server go run cmd/example_server/main.go
  2. 创建房间:
    • 方法1. 浏览器打开 http://localhost 点创建
    • 方法2. 命令 sh cmd/example_client/create_room.sh

运行example client

  1. 启动1号客户端 go run cmd/example_client/main.go -room=1 -id=1
  2. 启动2号客户端 go run cmd/example_client/main.go -room=1 -id=2

网络层

  • 初始化网络层,使用的kcp-go,可以根据需求切换成其他的
  • 消息包格式
     |-----------------------------message-----------------------------------------|
     |----------------------Header------------------|------------Body--------------|
     |------Body Length-------|--------Msg ID-------|------------Body--------------|
     |---------uint16---------|---------uint8-------|------------bytes-------------|
     |-----------2------------|----------1----------|-----------len(Body)----------|
    

客户端接入流程

proto文件

  • 消息流程
    1. 客户端发送第一个连接的消息包
      C->S: MSG_Connect & C2S_ConnectMsg
    2. 服务端给返回连接结果
      S->C: MSG_Connect & S2C_ConnectMsg
    3. 如果2返回ok,客户端向服务端发送进入房间消息
      C->S: MSG_JoinRoom
    4. 服务端返回进入房间消息
      S->C: MSG_Connect & S2C_JoinRoomMsg
    5. 客户端这时进入读条,并广播读条进度,其他客户端收到广播读条进度
      C->S: MSG_Progress & C2S_ProgressMsg
      S->C: MSG_Progress & S2C_ProgressMsg 注:广播者收不到这个消息
    6. 客户端告诉服务端自己已经准备好
      C->S: MSG_Ready
      S->C: MSG_Ready
    7. 当所有客户端都已经准备好,服务端广播开始
      S->C: MSG_Start
    8. 客户端可以进入游戏状态,客户端不停的向服务端发送操作,服务端不停的广播帧数据
      ∞ C->S: MSG_Input & C2S_InputMsg
      ∞ S->C: MSG_Frame & S2C_FrameMsg
    9. 当客户端游戏逻辑结束告诉服务端自己结束
      C->S: MSG_Result & C2S_ResultMsg
      S->C: MSG_Result
    10. 当客户端收到MSG_Result或者MSG_Close客户端断开网络连接进入其他流程
      注:客户端收到MSG_Result表示服务端已经收到并处理的客户端发来的结果
      注:客户端收到MSG_Close表示服务端房间已经关闭,客户端如果游戏流程没完也要强制退出

断线重连

  • 客户端只要发 C->S: MSG_Connect & C2S_ConnectMsg **(前提是当前游戏房间还存在)**即可进入房间,服务端会把之前的帧分批次发给客户端。(这里可以考虑改成客户端请求缺失的帧)

客户端工程

https://github.com/byebyebruce/lockstep-client-unity

lockstepserver's People

Contributors

byebyebruce 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.