gonet 是一个用 golang 实现的游戏服务器框架。
Game Server(GS):
玩家直接连接GS, 处理玩家逻辑,并与 HUB/SS 通信,GS存在若干个。
Hub Server(HUB):
若干个GS 连接到一个HUB, 只存在一个HUB,维护基础的全局信息,以及 GS<--->GS 的消息转发.
Stats Server(SS):
统计服务器,根据玩家的行为,记录策划需要的数据,以便于后期统计。
统计属于事后分析,数据量较大,性能需求不同, 故单独列为一个服务器。
GS到HUB/SS的通信,都是Call同步调用,即GS必须等待ACK。
HUB到GS的通信,只有forward数据包。
单播消息在玩家离线时会存入db, 登录后的启动过程 GS 直接读取db,并forward给玩家goroutine。(持久化)
多播消息会发送给所有的在线玩家(非持久化)
广播消息会发送给所有的在线玩家(非持久化)
GS节点可以单独重启
HUB 重启后,GS必须全部重启
SS 可随意重启,不影响业务
确保安装好bzr, graphviz, gawk
确保安装好mongodb
确保config.ini中的mongo_xxxx配置正确
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天感谢信。。。