golang -Pitaya 是一种简单、快速、轻量级游戏服务器和集群支持框架和客户端库iOS、Android,团结和其他人通过C SDK。它提供了一个基本的分布式多人游戏和服务器端应用程序开发框架。

先决条件Go >= 1.10

etcd (用于服务发现)

nats (可选的,用于发送和接收rpc, grpc实现也可以使用,如果喜欢的话)

docker (可选:用于在容器上运行etcd和nats依赖项)

安装

clone the repogit clone https://github.com/topfreegames/pitaya.git

setup pitaya dependenciesmake setup

Hacking pitaya

下面是一个跑pitaya的例子:

启动etcd(此命令需要docker-compose,并将在本地运行etcd容器。etcd可以在没有docker的情况下运行。cd ./examples/testing && docker-compose up -d etcd

run the connector frontend server from cluster_grpc examplemake run-cluster-grpc-example-connector

run the room backend server from the cluster_grpc examplemake run-cluster-grpc-example-room

Now there should be 2 pitaya servers running, a frontend connector and a backend room. To send requests, use a REPL client for pitaya pitaya-cli.$ pitaya-cli

Pitaya REPL Client>>> connect localhost:3250connected!>>> request room.room.entry>>> sv-> {"code":0,"result":"ok"}

Running the testsmake test

This command will run both unit and e2e tests.

Contributing

#TODO

AuthorsTFG Co - Initial work

License

Acknowledgementsnano authors for building the framework pitaya is based on.

pomelo authors for the inspiration on the distributed design and protocol

Resources

一个聊天的demopackage main

import (

"context"

"fmt"

"log"

"net/http"

"strconv"

"time"

"strings"

"github.com/spf13/viper"

"github.com/topfreegames/pitaya"

"github.com/topfreegames/pitaya/acceptor"

"github.com/topfreegames/pitaya/component"

"github.com/topfreegames/pitaya/config"

"github.com/topfreegames/pitaya/groups"

"github.com/topfreegames/pitaya/logger"

"github.com/topfreegames/pitaya/serialize/json"

"github.com/topfreegames/pitaya/timer"

)

type (

// Room represents a component that contains a bundle of room related handler

// like Join/Message

Room struct {

component.Base

timer *timer.Timer

}

// UserMessage represents a message that user sent

UserMessage struct {

Name    string `json:"name"`

Content string `json:"content"`

}

// NewUser message will be received when new user join room

NewUser struct {

Content string `json:"content"`

}

// AllMembers contains all members uid

AllMembers struct {

Members []string `json:"members"`

}

// JoinResponse represents the result of joining room

JoinResponse struct {

Code   int    `json:"code"`

Result string `json:"result"`

}

)

// NewRoom returns a Handler Base implementation

func NewRoom() *Room {

return &Room{}

}

// AfterInit component lifetime callback

func (r *Room) AfterInit() {

r.timer = pitaya.NewTimer(time.Minute, func() {

count, err := pitaya.GroupCountMembers(context.Background(), "room")

logger.Log.Debugf("UserCount: Time=> %s, Count=> %d, Error=> %q", time.Now().String(), count, err)

})

}

// Join room

func (r *Room) Join(ctx context.Context, msg []byte) (*JoinResponse, error) {

s := pitaya.GetSessionFromCtx(ctx)

fakeUID := s.ID()                              // just use s.ID as uid !!!

err := s.Bind(ctx, strconv.Itoa(int(fakeUID))) // binding session uid

if err != nil {

return nil, pitaya.Error(err, "RH-000", map[string]string{"failed": "bind"})

}

uids, err := pitaya.GroupMembers(ctx, "room")

if err != nil {

return nil, err

}

s.Push("onMembers", &AllMembers{Members: uids})

// notify others

pitaya.GroupBroadcast(ctx, "chat", "room", "onNewUser", &NewUser{Content: fmt.Sprintf("New user: %s", s.UID())})

// new user join group

pitaya.GroupAddMember(ctx, "room", s.UID()) // add session to group

// on session close, remove it from group

s.OnClose(func() {

pitaya.GroupRemoveMember(ctx, "room", s.UID())

})

return &JoinResponse{Result: "success"}, nil

}

// Message sync last message to all members

func (r *Room) Message(ctx context.Context, msg *UserMessage) {

err := pitaya.GroupBroadcast(ctx, "chat", "room", "onMessage", msg)

if err != nil {

fmt.Println("error broadcasting message", err)

}

}

func main() {

defer pitaya.Shutdown()

s := json.NewSerializer()

conf := configApp()

pitaya.SetSerializer(s)

gsi := groups.NewMemoryGroupService(config.NewConfig(conf))

pitaya.InitGroups(gsi)

err := pitaya.GroupCreate(context.Background(), "room")

if err != nil {

panic(err)

}

// rewrite component and handler name

room := NewRoom()

pitaya.Register(room,

component.WithName("room"),

component.WithNameFunc(strings.ToLower),

)

log.SetFlags(log.LstdFlags | log.Llongfile)

http.Handle("/web/", http.StripPrefix("/web/", http.FileServer(http.Dir("web"))))

go http.ListenAndServe(":3251", nil)

t := acceptor.NewWSAcceptor(":3250")

pitaya.AddAcceptor(t)

pitaya.Configure(true, "chat", pitaya.Cluster, map[string]string{}, conf)

pitaya.Start()

}

func configApp() *viper.Viper {

conf := viper.New()

conf.SetEnvPrefix("chat") // allows using env vars in the CHAT_PITAYA_ format

conf.SetDefault("pitaya.buffer.handler.localprocess", 15)

conf.Set("pitaya.heartbeat.interval", "15s")

conf.Set("pitaya.buffer.agent.messages", 32)

conf.Set("pitaya.handler.messages.compression", false)

return conf

}

游戏服务器框架php,golang -Pitaya 游戏服务器框架中文API教程相关推荐

  1. golang游戏服务器项目,基于Golang的游戏服务器框架cellnet开发日记(一)

    启程的故事 使用Golang写服务器是一件非常幸福的事情. 不用长时间的等待编译, 零依赖部署. 开发效率高, 多出的时间陪陪家人, 看书充充电多好. 所以Golang就像是手机界的苹果, 从发布后, ...

  2. linux环境搭建golang服务器,Linux下golang环境搭建-Go语言中文社区

    1.首先从使用wget https://storage.googleapis.com/golang/go1.12.linux-amd64.tar.gz命令下载安装包,可以根据自己的需要选择版本. 2. ...

  3. ioGame 网络游戏服务器框架 (java)、java游戏服务器、netty 集群分步式的网络游戏服务器

    ioGame 国内首个基于蚂蚁金服 SOFABolt 的 java 网络游戏服务器框架:无锁异步化.事件驱动的架构设计 通过 ioGame 可以很容易的搭建出一个集群无中心节点.有状态多进程的分步式游 ...

  4. 包含对象名字的游戏id_教你从头写游戏服务器框架(三)

    关于作者:韩伟,腾讯互娱高级工程师,目前在Next产品中心研发创新类型游戏. 本文为系列文章的第 3篇 第一篇:教你从头写游戏服务器框架(1) 第二篇:教你从头写游戏服务器框架(2)   协  程   ...

  5. java 分布式游戏服务器框架,集群游戏服务器框架,游戏服务器网关框架 ioGame 网络游戏服务器框架

    网络游戏框架简介 ioGame 是一个由 java 语言编写的网络游戏服务器框架.支持 websocket.tcp ,适用于全球同服.回合制游戏.策略游戏.即时战斗等游戏服务器的开发.具有高性能.稳定 ...

  6. et框架做游戏服务器性能好吗,et游戏服务器框架

    et游戏服务器框架 内容精选 换一换 华为云视频分析服务帮助中心,为用户提供产品简介.用户指南.API参考.常见问题等技术文档,帮助您快速上手使用视频分析服务. ServiceStage是一个应用托管 ...

  7. (十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天

    聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了,那么我们在上一篇文章的代码基础上继续扩展,丰富系统,另外也熟悉下他的更多的用法,这一节我将扩展它:增加一个机器人自动聊天的 ...

  8. java游戏服务器面试_我做游戏开发这八年

    点击上方"CSDN学院精品课",选择"置顶公众号" CSDN学院精品课  IT人的职业提升平台 作者 | kakashi8841 简述这篇文章并不是想教会大家如 ...

  9. gpu云服务器运行游戏_GPU云服务器可以挂在大型游戏吗

    随着科技的发展,云服务器和网络游戏都是互联网发展的产物.现在随着网络的广泛发展和使用,云服务器和游戏都是现在比较火热的行业,云服务器基于云计算技术的发展,用于存放网站数据,在现在的生产工作中占据重要地 ...

最新文章

  1. 39[dropbox etc]
  2. 计算机毕业论文多久,计算机毕业论文
  3. 如何使用Nikto漏洞扫描工具检测网站安全
  4. java学习(142):file类的基本创建
  5. LeetCode题解 343.Integer Break
  6. Spring Boot参数校验
  7. 蚂蚁集团前三季度营收1181.91亿元 支付宝月活用户7.31亿
  8. nginx做代理服务
  9. 13、几点小结,unsigned long long
  10. php168 shell,php168 v6/v7鸡肋Getshell安全问题
  11. labelcommand打印条码_Zebra条码打印机编程命令
  12. 智慧屏如何连接电视盒子
  13. 实现了一个简单的以图搜图功能(带代码)
  14. c语言n个自然数得阶乘求和,计算n个自然数阶乘的和
  15. ECCV 2022 Oral | 无需微调即可泛化!RegAD:少样本异常检测新框架
  16. 百度云网盘不限速下载之Google Chrome浏览器+SwitchyOmega插件
  17. PCIE DWC - 3 - PCI-PM Software Compatible Mechanisms
  18. pom 文件的project标签报错Failed to read artifact descriptor for xxx:jar
  19. 区块链+大数据:万物互联时代的“CP组合”
  20. 程序员的量化交易之路(26)--Cointrader之Listing挂牌实体(13)

热门文章

  1. Qt之控件绘制圆角(可以实现任意角度为圆角)
  2. 光学设计手册学习(一)——望远镜系统
  3. 华为云提供“多云灾备”三大方案,为云上业务无中断保驾护航
  4. 安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】...
  5. 2022史上最全java面试题题库大全800题含答案
  6. 背单词软件 基于VS2019 EasyX (C语言实现)
  7. js数组求和、最大、最小值
  8. Java中字节Byte和位Bit的关系
  9. 为什么光荣公司做的三国游戏比中国人做的越来越好
  10. Matlab的simplify函数化简符号表达式