🎮 后端部署手册

街机游戏厅 - 联机对战服务器部署指南

← 返回游戏厅

📢 重要说明

当前版本仅支持 FC/NES 游戏联机对战,街机游戏和其他平台游戏请使用单人模式游玩。联机功能基于 WebRTC P2P 技术,信令服务器仅用于建立连接,游戏数据直接在玩家之间传输。

📋 功能概述

🎮
FC/NES 联机
👥
最多4人对战
🌐
P2P 低延迟
💬
游戏内聊天

支持的游戏类型

游戏类型 单人模式 联机对战
FC/NES 游戏 ✅ 支持 ✅ 支持
街机游戏 (FBNeo) ✅ 支持 ❌ 暂不支持
其他平台 (GBA/SFC等) ✅ 支持 ❌ 暂不支持

📥 下载服务器文件

信令服务器是一个 Python 脚本,用于帮助玩家建立 P2P 连接。

📥 下载 signaling_server.py
服务器文件很小(约 10KB),只需要 Python 3.7+ 和 websockets 库即可运行。

系统要求

🏠 本地部署(局域网游玩)

适合在家里或办公室局域网内与朋友联机游玩。

1 安装 Python

python.org 下载并安装 Python 3.7+

2 安装依赖
pip install websockets
3 启动服务器
# Windows
python signaling_server.py

# Mac/Linux
python3 signaling_server.py
4 查看本机 IP
# Windows
ipconfig

# Mac/Linux
ifconfig 或 ip addr

找到类似 192.168.x.x 的局域网 IP 地址

5 配置游戏

在游戏首页点击右上角 🌐 按钮,输入服务器地址:

局域网配置示例:
ws://192.168.1.100:8765
局域网内的其他玩家也需要配置相同的服务器地址才能联机。

☁️ 服务器部署(公网联机)

部署到云服务器,让任何地方的朋友都能联机游玩。

方式一:直接运行(测试用)

1 上传文件到服务器
scp signaling_server.py user@your-server:/home/user/
2 安装依赖并运行
pip3 install websockets
python3 signaling_server.py
3 开放防火墙端口
# 阿里云/腾讯云需要在安全组开放 8765 端口
# Linux 防火墙
sudo ufw allow 8765

方式二:使用 systemd 守护进程(推荐)

1 创建服务文件
sudo nano /etc/systemd/system/game-signaling.service
[Unit]
Description=Game Signaling Server
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/home/user
ExecStart=/usr/bin/python3 /home/user/signaling_server.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
2 启动服务
sudo systemctl daemon-reload
sudo systemctl enable game-signaling
sudo systemctl start game-signaling

# 查看状态
sudo systemctl status game-signaling

方式三:使用 Nginx 反向代理 + SSL(生产环境)

1 Nginx 配置
server {
    listen 443 ssl;
    server_name game.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location /ws {
        proxy_pass http://127.0.0.1:8765;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
    }
}
公网配置示例:
ws://your-server-ip:8765

使用 SSL 时:
wss://game.yourdomain.com/ws
生产环境强烈建议使用 wss:// (WebSocket Secure) 协议,否则在 HTTPS 页面上可能无法连接。

⚙️ 配置到游戏

服务器部署完成后,需要在游戏中配置服务器地址。

1 打开游戏首页

访问街机游戏厅网站

2 点击网络设置

点击右上角的 🌐 按钮打开服务器设置弹窗

3 输入服务器地址

在"信令服务器地址"输入框中填入你的服务器地址

格式说明:
局域网 ws://192.168.x.x:8765
公网 IP ws://公网IP:8765
域名 + SSL wss://game.domain.com/ws
4 保存设置

点击"保存设置"按钮,配置会保存到浏览器本地存储

配置保存后,所有想要联机的玩家都需要配置相同的服务器地址。

❓ 常见问题

Q: 连接失败怎么办?

Q: 延迟很高怎么办?

Q: 为什么街机游戏不能联机?

街机游戏使用 EmulatorJS 引擎,目前技术架构不支持帧同步联机。FC/NES 游戏使用自研的 JSNES 引擎,支持完整的联机功能。

Q: 最多支持几人联机?

最多支持 4 人同时联机,但大多数 FC 游戏只支持 2 人同时游玩。

🔧 技术架构

┌─────────────┐     WebSocket     ┌─────────────────┐
│   玩家 A    │◄──────────────────►│   信令服务器     │
│  (浏览器)   │                    │ (signaling.py)  │
└──────┬──────┘                    └────────┬────────┘
       │                                    │
       │  WebRTC P2P (游戏数据)              │ WebSocket
       │                                    │
       ▼                                    ▼
┌─────────────┐     WebSocket     ┌─────────────────┐
│   玩家 B    │◄──────────────────►│   信令服务器     │
│  (浏览器)   │                    │                 │
└─────────────┘                    └─────────────────┘

信令服务器职责:
- 房间创建/加入管理
- 交换 WebRTC 连接信息 (SDP/ICE)
- 不传输游戏数据,仅用于建立 P2P 连接