
基于 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: 状态更新