页游源码
点击放大


GOWOG is a multiplayer web 游戏 written in Golang. Thanks to Golang, the 服务端 can handle a large number of players concurrently.
!screenshot
Southeast Asia region (, Singapore, Malaysia ...)
Due to the cost of hosting. The 服务端 is hosted only on SEA.
As the 服务端, 客户端 and messages are decoupled, it is easy to communicate with backend. Below is my AI agent written in Python that learns to interact with en. This experiment is to find a path in a maze using neuroe
The implementation is at gowog/ai
You can try the 游戏 on local by running ./run_local.sh. It will build a docker en and run the 游戏 on port 8080.
Open the browser "localhost:8080"
!screenshot
The 游戏 contains two part: 服务端 and 客户端. 服务端 uses Golang and 客户端 uses Node.JS and Phaser 游戏 引擎.
#### Server
Install Golang
Install dependencies
* go get github.com/gorilla/websocket
* go get github.com/golang/protobuf/protoc-gen-go
* go get github.com/pkg/profile
Run the 服务端. The 服务端 will listen at port 8080.
Go to *gowog* folder
* go run server/cmd/server/*
#### Client
Install NodeJS
Go to *gowog/client* folder
Install dependencies
* npm install
Run the 客户端. The 客户端 will listen at port 3000. en is the IP of gowog ser is localhost:8080 now.
* npm run dev -- --en=localhost:8080
Open the browser "localhost:3000"
Note:
In de we run 客户端 on port 3000 and 服务端 on port 8080 separately.
In production and docker en, the 客户端 is built and golang 服务端 will return 客户端 page on the same port 8080. Therefore, if we run docker en, the 游戏 will start at "localhost:8080" in browser.
#### Communication con
Communication packages between 服务端 and 客户端 is based on protobuf. Install protoc for protobuf generate.
*
E you change package singature in */sert.proto*. Run
* go to gowog/server
* /generate.sh
Frontend
Backend
AI
#### Why we need Golang for multiplayer 游戏?
Building a massively multiplayer 游戏 is very difficult and it's currently o. You have to ensure the latency is acceptable, handle shared states concurrently and allow it to scale . Golang provides a very elegant concept to handle concurrency with goroutine and channel.
#### Why the gameplay is so simple and frontend codebase is so unorganized?
The gameplay is mainly for demonstration purpose. My goal is to keep the 游戏 simple as current and scale number of players while maintaining good latency (< 100ms). I welcome all of your ideas to make the 游戏 more scalable.
However, I'm still open to Graphic impro and 客户端 codebase refactor. I would love to see some particles burst or glow, motion effects. Remember that different people ha perspective on how the 游戏 should look, so we need full consensus before making ui change.
#### Why protobuf?
To optimize package size, we need to compress it into binary. Protobuf offers fast language-neutral serialization and deserilization, so Golang 服务端 can communicate with JS 客户端 in an optimal way.
We can consider faster serilization format like Cap'n Proto or FlatBuffers.
#### Why the multiplayer 游戏 is not room-based (less than 20 players per 游戏)
In my opinion, room-based is less challenging because each room is totally separated from each other and we can scale the 游戏 easier by adding more instances. This repo is to illustrate how many players the 游戏 can serve on one multi-core single machine.
And of course my ultimate goal is to make the non room-based 游戏 scale by adding more instances.
I'm looking forward to have your contribution to GOWOG, which can help the 游戏 smoother and more scalable. If you have any ideas to improve 游戏 performance, please discuss in this issue Discussion.
I also welcome frontend impro like codebase reorganization, performance enhancement. In the case you want to improve the UI, please create an issue to show the new design so we can make an agreement on that.
As my desire is to utilize Golang concurrency paradigm to achie gaming experience with massi of players*, I will keep the gameplay simple. Player can mo and shoot each other. Any gameplay changes are not accepted.
(My inspiration)
MIT License
Nguyen Huu Thanh
开发语言:Go
项目类型:Go 网页多人联机游戏
Star 数:126
这是一套Go 网页多人联机游戏,代码结构清晰,适合开发者学习游戏的客户端渲染、服务端逻辑、场景管理与资源加载。项目涵盖了游戏的核心玩法、界面交互、地图与角色系统等模块,对理解游戏开发的完整流程具有较高的参考价值。
从技术实现角度看,游戏项目的难点在于:游戏循环与状态管理、资源加载与渲染优化、客户端与服务端的协议同步、以及多平台适配。本项目在这些方面提供了可运行的实现,开发者可以在此基础上进行二次开发或学习研究。
1. 下载源码压缩包,解压到本地开发环境。
2. 根据项目类型准备对应的运行环境(Node.js / Go / C# / Unity / Godot 等)。
3. 按照 README 中的步骤配置依赖、数据库和配置文件。
4. 先启动服务端,再运行客户端,即可进入游戏进行测试。
注意:本项目仅供学习研究使用,请勿用于商业或非法用途。
对于想进入游戏开发领域的开发者来说,这套源码是一个很好的入门参考。通过阅读代码,可以学习到游戏的核心玩法实现、场景与资源管理、网络协议设计、以及渲染优化等关键技术点。
同时,项目中的代码组织方式和模块划分,也展示了游戏项目在工程化方面的实践经验,值得开发者深入研究和借鉴。理解一个完整游戏项目的架构,对后续开发其他类型游戏也很有帮助。
本资源来源于开源社区,仅供学习研究和技术交流使用,请勿用于任何商业或违法违规用途。使用本项目产生的一切后果由使用者自行承担。若涉及第三方权益,请联系删除。
| 资源标题 | gowog - Go 网页多人联机游戏 |
| 所属分类 | 页游源码 |
| 发布作者 | admin |
| 发布时间 | 2026-10-05 21:08:59 |
| 下载权限 | 免费下载 |
| 附件数量 | 2 个下载链接 |
| 浏览次数 | 345 |
| 讨论数量 | 0 |
| 主题状态 | 正常讨论中 |