当前位置: 首页 > 软件库 > 程序开发 > 游戏开发包 >

gonet

游戏服务器框架
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 游戏开发包
软件类型 开源软件
地区 国产
投 递 者 洪知
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

gonet 是一个用 golang 实现的游戏服务器框架。

部署:

  • Game Server(GS):
    玩家直接连接GS, 处理玩家逻辑,并与 HUB/SS 通信,GS存在若干个。

  • Hub Server(HUB):
    若干个GS 连接到一个HUB, 只存在一个HUB,维护基础的全局信息,以及 GS<--->GS 的消息转发.

  • Stats Server(SS):
    统计服务器,根据玩家的行为,记录策划需要的数据,以便于后期统计。
    统计属于事后分析,数据量较大,性能需求不同, 故单独列为一个服务器。

通信原则:

  1. GS到HUB/SS的通信,都是Call同步调用,即GS必须等待ACK。

  2. HUB到GS的通信,只有forward数据包。

  3. 单播消息在玩家离线时会存入db, 登录后的启动过程 GS 直接读取db,并forward给玩家goroutine。(持久化)

  4. 多播消息会发送给所有的在线玩家(非持久化)

  5. 广播消息会发送给所有的在线玩家(非持久化)

服务器状态一致性

  1. GS节点可以单独重启

  2. HUB 重启后,GS必须全部重启

  3. SS 可随意重启,不影响业务

安装先决条件:

  1. 确保安装好bzr, graphviz, gawk

  2. 确保安装好mongodb

  3. 确保config.ini中的mongo_xxxx配置正确

  4. export GOPATH='当前目录'

安装:

  • xtaci@ubuntu:~$ git clone https://github.com/xtaci/gonet

  • xtaci@ubuntu:~$ cd gonet

  • xtaci@ubuntu:~/gonet$ export GOPATH=~/gonet

  • xtaci@ubuntu:~/gonet$ go get labix.org/v2/mgo

  • xtaci@ubuntu:~/gonet$ make

  • xtaci@ubuntu:~/gonet$ ./start-test.sh

  • 本文转载自用Golang构建gRPC服务 本教程提供了Go使用gRPC的基础教程 在教程中你将会学到如何: 在.proto文件中定义一个服务。 使用protocol buffer编译器生成客户端和服务端代码。 使用gRPC的Go API为你的服务写一个客户端和服务器。 继续之前,请确保你已经对gRPC概念有所了解,并且熟悉protocol buffer。需要注意的是教程中的示例使用的是proto3

  • net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 ip长度 const ( IPv4len = 4 IPv6len = 16 ) 常用ipv4 var ( IPv4bcast = IPv4(255, 255, 255, 255) // 广播地址 IPv4allsys = IPv4(224, 0, 0,

  • Golang net包 最近在项目日志报警中,经常看到"broken pipe"这个报错,经过询问负责基础架构的同事,是server正在处理的时候client主动关闭TCP连接导致的,可以忽略;于是我们的做法是,将这个报警项添加进了白名单。但本着刨根问底的心态,我自己按照网上的文章也尝试本地复现了一下这个报错。 1 Conn Conn是一个基本的接口类型,以数据流为向导的网络连接接。注意是接口类型

  • go net/http Client使用总结 Client数据结构 // A Client is an HTTP client. Its zero value (DefaultClient) is a // usable client that uses DefaultTransport. // // The Client's Transport typically has internal s

  • Go net/http获取body中json格式数据 package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" ) type AutotaskRequest struct { RequestID string `json:"requestid"` Clone CloneModel `json

  • RPC rpc远程过程调用,go net/rpc包提供了通过网络访问一个对象的方法的能力。服务器需要注册对象, 通过对象的类型名暴露这个服务。注册后这个对象的输出方法就可以远程调用,这个库封装了底层传输的细节,包括序列化。服务器可以注册多个不同类型的对象,但是注册相同类型的多个对象的时候回出错。 通过阅读net/rpc包你可以学到互斥锁、goroutine、map、channel、interfac

 相关资料
  • 我试图建立一个通用服务器总是在连接的客户端。 该体系结构由4个主要组件组成 有状态应用服务器 无状态网关服务器 客户排队 系统和经纪人 工艺流程 客户端连接到网关 我正在使用JavaNetty作为网关。appserver也是用Java编写的。 我很想说这个设计像Mongrel2,但我不能完全确定。我想说,这更符合城市飞艇氦边缘服务器的设计(http://urbanairship.com/blog/

  • JAGS 游戏服务器是一个开源的 Java / AS 3.0 的游戏服务器,支持多玩家、碰撞检测以及键盘事件等等。

  • 二本鼠鼠学Java没出路。。 技术面 - 50min - 9.26 自我介绍 介绍一下你的项目经历 MySQL索引底层结构 Redis有哪些数据结构 Redis的持久化机制 学过其他语言吗(c++和go),说一下c++、go、Java的区别 LRU怎么实现 最短路径算法实现 JVM垃圾回收算法 手撕在一排数据中算出不重复数据的子集 TCP三次握手 你知道什么是SYN攻击吗 TCP四次挥手为什么是四

  • 过年回上海裸辞出去玩了一个月,5月回来找的工作,正好现在有时间了,抽空写一下社招面经,有些已经忘记了。裸辞还是太冲动了,菜鸡不配gap,两年工作经验不应该随便裸辞,还是太年轻、太狂妄了。当年校招腾讯、祖龙、小米等等offer随便拿,以为社招还跟校招一样简简单单,结果现在只能去个小公司养老了。 巨人网络(球球大作战) golang游戏后端,线下1、2、3面一起的 一面 项目架构图 pb的底层实现结构

  • 我正在尝试构建一个使用套接字和udp协议的python在线游戏。我创建了一个多处理和多线程服务器:https://pastebin.com/zucxwpc9。 我会解释里面的代码是做什么的。所以首先,它等待两个请求,并将它们放入lobby列表中。如果发出了两个请求,服务器将向客户端发送一个新端口,并创建一个具有两个线程的新进程。两个线程都在使用新端口,一个接收数据,另一个发送数据。我正在使用队列,

  • 最后,是否可以重复使用相同的runnable(每个游戏会话1个),而不是每回合创建一个新的。

  • 我试图建立一个通用服务器总是在连接的客户端。 该体系结构由4个主要组件组成 有状态应用程序服务器 工艺流程 客户端连接到网关 我正在使用JavaNetty作为网关。appserver也是用Java编写的。 我很想说这个设计像Mongrel2,但我不能完全确定。我想说,这更符合城市飞艇氦边缘服务器的设计(http://urbanairship.com/blog/2010/08/24/c500k-in

  • 面试时间:8.15 原神组(原神,启动!) 八股: 虚函数、虚析构函数 智能指针 右值引用、移动语义 编译、链接过程 字节序、如何判断当前环境字节序 线程同步 锁 栈、队列、相互实现 图、树 最短路径算法 AVL树、红黑树 IO多路复用 手撕: atoi(考虑各种边界条件) 实习: 没问 第2天感谢信。。。