基于 WebSocket 的实时多人五子棋游戏,使用 PHP Asyncio Gamekit 框架开发。

“在线体验地址:https://github.tinywan.com/gomoku.html


运行日志
# php start_gomoku_server.php start
=== 开源技术小栈 五子棋游戏服务器 ===
监听地址: ws://0.0.0.0:8201
支持游戏: GomokuRoom
Workerman[start_gomoku_server.php] start in DEBUG mode
--------------------------------------------- WORKERMAN ----------------------------------------------
Workerman version:4.2.1 PHP version:8.3.15 Event-Loop:\Workerman\Events\Select
---------------------------------------------- WORKERS -----------------------------------------------
proto user worker listen processes status
tcp root GomokuGameServer websocket://0.0.0.0:8201 1 [OK]
------------------------------------------------------------------------------------------------------
[2025-10-1815:00:09] [INFO] New player connected: player_68f3ab79e6f572.86105239
玩家 开源技术小栈 加入房间 room_68f3ab7ca4a8c0.36846406
New connection: 5
[2025-10-1815:00:15] [INFO] New player connected: player_68f3ab7fbbaf87.89767589
玩家 Tinywan 加入房间 room_68f3ab7ca4a8c0.36846406
房间 room_68f3ab7ca4a8c0.36846406 开始启动游戏...
五子棋房间 room_68f3ab7ca4a8c0.36846406 创建成功
房间 room_68f3ab7ca4a8c0.36846406 五子棋游戏开始!
玩家 开源技术小栈 分配为黑棋 (1)
玩家 Tinywan 分配为白棋 (2)
房间 room_68f3ab7ca4a8c0.36846406 游戏主循环开始
房间 room_68f3ab7ca4a8c0.36846406 游戏结束: 开源技术小栈 获胜!
房间 room_68f3ab7ca4a8c0.36846406 游戏主循环结束
重新开始 - 玩家 开源技术小栈 分配为黑棋 (1)
重新开始 - 玩家 Tinywan 分配为白棋 (2)
房间 room_68f3ab7ca4a8c0.36846406 游戏重新开始
重新开始 - 玩家 开源技术小栈 分配为黑棋 (1)
重新开始 - 玩家 Tinywan 分配为白棋 (2)
房间 room_68f3ab7ca4a8c0.36846406 游戏重新开始
重新开始 - 玩家 开源技术小栈 分配为黑棋 (1)
重新开始 - 玩家 Tinywan 分配为白棋 (2)
房间 room_68f3ab7ca4a8c0.36846406 游戏重新开始
重新开始 - 玩家 开源技术小栈 分配为黑棋 (1)
重新开始 - 玩家 Tinywan 分配为白棋 (2)
房间 room_68f3ab7ca4a8c0.36846406 游戏重新开始
games/
├── config/ # 配置文件
│ └── game.php # 游戏配置
├── logs/ # 日志目录
├── public/ # 前端文件
│ └── gomoku_online.html # 游戏客户端页面
├── src/ # 服务端源码
│ ├── GomokuGame.php # 游戏逻辑类
│ ├── GomokuServer.php # 主服务器类
│ └── MessageHandler.php # 消息处理器
├── vendor/ # 依赖包
├── composer.json # 依赖配置
├── start_gomoku_server.php # 启动脚本
└── README.md # 项目说明
composer install
php start_gomoku_server.php start
打开浏览器访问:public/gomoku_online.html
// 客户端发送
{
"event": "make_move",
"data": {"row": 7, "col": 7}
}
// 服务端响应
{
"event": "game:move_made",
"data": {
"row": 7,
"col": 7,
"player": 1,
"current_player": 2,
"board": [...],
"move_count": 1
}
}
set_name: 设置玩家名称quick_match: 快速匹配make_move: 落子undo_move: 悔棋restart_game: 重新开始end_game: 结束游戏get_game_state: 获取游戏状态room:created: 房间创建player:join: 玩家加入player:leave: 玩家离开game:start: 游戏开始game:move_made: 落子成功game:move_undone: 悔棋成功game:restarted: 游戏重新开始game:end: 游戏结束game:state_update: 状态更新