module
Version:
v0.1.0
Opens a new window with list of versions in this module.
Published: Mar 11, 2021
License: GPL-3.0
Opens a new window with license information.
README
¶
Lock Step Server
用golang写的帧同步服务器

帧同步服务器目标是作为一个可以横向扩展,完全脱离玩法逻辑的帧同步服务器。
- 采用KCP(可根据需求改成其他协议)作为网络底层
- 帧同步作为同步方式
- protobuf作为传输协议
- 服务器间传输可以用grpc和http
编译
编译example
cd example
go build
example的创建房间
-
http方式
- go run example/main.go -web=10002
- 浏览器打开 http://127.0.0.1:10002
- Room是房间ID,Member填参战者ID(用,隔开)
-
grpc方式(未来会加入)
...
网络层
客户端接入流程
proto文件
- 消息流程
- 客户端发送第一个连接的消息包
C->S: MSG_Connect & C2S_ConnectMsg
- 服务端给返回连接结果
S->C: MSG_Connect & S2C_ConnectMsg
- 如果2返回ok,客户端向服务端发送进入房间消息
C->S: MSG_JoinRoom
- 服务端返回进入房间消息
S->C: MSG_Connect & S2C_JoinRoomMsg
- 客户端这时进入读条,并广播读条进度,其他客户端收到广播读条进度
C->S: MSG_Progress & C2S_ProgressMsg
S->C: MSG_Progress & S2C_ProgressMsg
注:广播者收不到这个消息
- 客户端告诉服务端自己已经准备好
C->S: MSG_Ready
S->C: MSG_Ready
- 当所有客户端都已经准备好,服务端广播开始
S->C: MSG_Start
- 客户端可以进入游戏状态,客户端不停的向服务端发送操作,服务端不停的广播帧数据
∞ C->S: MSG_Input & C2S_InputMsg
∞ S->C: MSG_Frame & S2C_FrameMsg
- 当客户端游戏逻辑结束告诉服务端自己结束
C->S: MSG_Result & C2S_ResultMsg
S->C: MSG_Result
- 当客户端收到
MSG_Result
或者MSG_Close
客户端断开网络连接进入其他流程
注:客户端收到MSG_Result表示服务端已经收到并处理的客户端发来的结果
注:客户端收到MSG_Close表示服务端房间已经关闭,客户端如果游戏流程没完也要强制退出
断线重连
- 客户端只要发 C->S:
MSG_Connect & C2S_ConnectMsg
**(前提是当前游戏房间还存在)**即可进入房间,服务端会把之前的帧分批次发给客户端。(这里可以考虑改成客户端请求缺失的帧)
客户端工程
https://github.com/byebyebruce/lockstep-client-unity
Directories
¶
Click to show internal directories.
Click to hide internal directories.