golang 捕鱼 h5游戏

dwg255 · 2019-10-16 22:17:30 · 6034 次点击 · 预计阅读时间 4 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-10-16 22:17:30 的文章,其中的信息可能已经有所发展或是发生改变。

项目地址:

https://github.com/dwg255/fish

说明:go语言 游戏,go捕鱼,高性能游戏服务端 golang开发的服务端编程简单,执行高效,有效利用多核资源,游戏server端为golang典型的应用场景之一。项目大量使用goroutine及channel,命名及注释清晰。

主要依赖包:

  • github.com/astaxie/beego 主要用到其logs包,监听http端口及处理请求使用golang自带的包 net/http
  • github.com/gorilla/websocket websocket连接及收发消息

项目目录说明:

  • common 公共包,包含全局配置、生成全部牌型的方法、计算牌型以及客户端协议常量
    • api/thrift 定义游戏服务器和账号服务器rpc通讯协议
    • conf 定义账号、大厅、游戏服务器的redis等配置,以及出鱼的路劲配置文件*监听的端口、日志级别、日志路径、存储路径等*
    • tools 公共工具,包括aes加密算法,thrift rpc调用工具,snowflake生成工具
  • account *账号中心服务* 通过thrift rpc 提供账号注册,认证等服务
    • main 入口目录
    • common
    • service
  • client 捕鱼客户端静态资源目录
  • hall 捕鱼大厅
    • main 入口目录
    • common
    • controllers 控制器目录
    • router 路由目录
  • game `处理游戏逻辑*`
    • main 入口目录
    • common
    • controllers 控制器目录
    • router 路由目录
    • service 逻辑目录
func init() {      //生成pid文件,保存pid
    pidFileName := "pid"
    fileInfo, err := os.Stat(pidFileName)
    if err != nil {
        if os.IsNotExist(err) {
            err = os.Mkdir(pidFileName, os.ModePerm)
            fileInfo, _ = os.Stat(pidFileName)
        }
    }
    if fileInfo.IsDir() {
        pid := os.Getpid()
        pidFile, err := os.OpenFile(pidFileName+"/landlord.pid", os.O_RDWR|os.O_CREATE, 0766)
        if err != nil {
            logs.Error("open pidFile [%s] error :%v", pidFileName, err)
            return
        }
        err = pidFile.Truncate(0)  //清空数据

        _, err = io.WriteString(pidFile, strconv.Itoa(pid))
        if err != nil {
            logs.Error("write pid error :%v", err)
        }

        err = pidFile.Close()
        if err != nil {
            logs.Error("close pid file err: %v", err)
        }
    } else {
        logs.Error("pidFile [%s] is exists and not dir", pidFileName)
    }
}

更多代码详见 GitHub -service -room.go 文件内包含压测代码,已通过压测并稳定运行半年左右。

运行步骤:

1.下载源码:

git clone https://github.com/dwg255/fish

2.编译:

cd fish\
go build -o account.exe account\main\main.go account\main\init.go account\main\config.go
go build -o hall.exe hall\main\main.go hall\main\init.go hall\main\config.go
go build -o fish.exe game\main\main.go game\main\init.go game\main\config.go

3.解压客户端: ​ tar -zxvf fish.tar.gz /var/www/html/client/fish

4.配置nginx:

    server {
        listen       80;
        server_name  fish.com;
        charset utf8;
        index index.html index.htm;
        location /qq {
            add_header Access-Control-Allow-Origin *;
            proxy_set_header X-Target $request_uri;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:9000;
        }
        location / {
            root /var/www/html/client/fish;
            add_header Access-Control-Allow-Origin *;
            expires 7d;
        }
    }
 配置文件位置 /common/conf 内含redis配置和qq第三方登录配置,请自行修改。

5.在线示例: ​ http://fish.blzz.shop


License

This project is released under the terms of the MIT license. See LICENSE for more information or see https://opensource.org/licenses/MIT.


5.运行截图:

img

img

img

img

img

img

img


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6034 次点击  
加入收藏 微博
2 回复  |  直到 2019-10-23 10:06:37
mlzhou
mlzhou · #1 · 6年之前

学习中,在哪里截断QQ账户登录,使用游客登录?

mlzhou
mlzhou · #2 · 5年之前

这个框架不能高并发吧~~~ 作为学习rpc是个不错的例子。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传