数据同步
多服务器间封禁数据的同步机制
概述
NDPR 提供多种数据同步方式,确保所有连接的服务器都能获取最新的封禁信息。
同步方式
1. 实时同步(推荐)
通过 API 实时同步封禁数据:
Python
import requests
import time
API_URL = "http://localhost:5030"
TOKEN = "your_server_token"
def sync_bans():
"""同步封禁数据"""
# 获取封禁列表
response = requests.get(f"{API_URL}/bans/download", params={"token": TOKEN})
if response.status_code == 200:
download_url = response.json()['url']
# 下载并应用封禁数据
# ...
print("同步成功")
# 通知下载完成,清理临时文件
requests.post(f"{API_URL}/bans/download/done", json={"token": TOKEN})
# 定时同步
while True:
sync_bans()
time.sleep(60) # 每分钟同步一次
2. v1 协议同步
使用 v1 兼容接口:
Bash
curl http://localhost:5020/bans
响应包含所有封禁数据:
JSON
{
"action": "list",
"player_count": 15,
"ip_count": 10,
"active_players": [...],
"active_ips": [...]
}
3. 定时拉取同步
Python
import requests
import schedule
import time
def job():
response = requests.get("http://localhost:5020/bans")
bans_data = response.json()
# 处理封禁数据...
schedule.every(5).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
数据格式
玩家封禁数据
JSON
{
"username": "player123",
"ip": "192.168.1.1",
"cause": "违规操作",
"timestamp": "2024-01-01 12:00:00"
}
IP 封禁数据
JSON
{
"ip": "192.168.1.1",
"cause": "恶意攻击",
"players": ["player1", "player2"],
"timestamp": "2024-01-01 12:00:00"
}
同步配置
本地同步脚本示例
Python
#!/usr/bin/env python3
import requests
import json
import os
NDPR_API = "http://your-ndpr-server:5030"
TOKEN = "your_token"
LOCAL_BANS_FILE = "bans.json"
def download_bans():
"""下载封禁数据"""
resp = requests.get(f"{NDPR_API}/bans/download", params={"token": TOKEN})
if resp.status_code == 200:
url = resp.json()['url']
# 下载文件...
return True
return False
def apply_bans():
"""应用封禁到本地服务器"""
# 根据服务端类型实现
pass
def main():
if download_bans():
apply_bans()
requests.post(f"{NDPR_API}/bans/download/done", json={"token": TOKEN})
if __name__ == "__main__":
main()
最佳实践
<div class="custom-block tip">
<div class="custom-block-title">建议</div>
1. 生产环境使用实时同步<br>
2. 同步频率建议 1-5 分钟<br>
3. 同步失败时记录日志并告警<br>
4. 定期备份本地封禁数据
</div>