使用aaugustin/websockets在Fly.io上部署WebSocket服务器指南
websockets 项目地址: https://gitcode.com/gh_mirrors/web/websockets
概述
本文将详细介绍如何将基于aaugustin/websockets库开发的WebSocket服务器部署到Fly.io云平台。Fly.io是一个现代化的应用部署平台,特别适合需要全球分布式部署的实时应用。
准备工作
应用示例代码
我们以一个简单的WebSocket回显服务器为例,这个服务器会原样返回客户端发送的所有消息。以下是完整的Python代码(app.py
):
import asyncio
import os
import signal
from aiohttp import web
import websockets
async def health_check(request):
return web.Response(text="OK\n")
async def echo(websocket):
async for message in websocket:
await websocket.send(message)
async def start_server():
# 设置信号处理
loop = asyncio.get_running_loop()
stop = loop.create_future()
loop.add_signal_handler(signal.SIGTERM, stop.set_result, None)
# 创建HTTP服务器用于健康检查
app = web.Application()
app.add_routes([web.get("/healthz", health_check)])
runner = web.AppRunner(app)
await runner.setup()
site = web.TCPSite(runner, "0.0.0.0", 8080)
await site.start()
# 启动WebSocket服务器
async with websockets.serve(echo, "0.0.0.0", 8080):
await stop # 等待终止信号
# 清理资源
await runner.cleanup()
if __name__ == "__main__":
asyncio.run(start_server())
这个实现包含了生产环境部署的几个关键要素:
- 提供
/healthz
端点用于健康检查 - 正确处理SIGTERM信号实现优雅关闭
依赖声明
创建requirements.txt
文件声明依赖:
websockets>=11.0
aiohttp>=3.8
部署流程
1. 安装Fly CLI工具
首先需要在本地安装Fly的命令行工具,具体安装方法请参考Fly官方文档。
2. 初始化应用
在项目目录下执行:
fly launch
这个命令会:
- 扫描项目代码
- 检测到Python应用
- 使用Paketo buildpack进行构建
- 生成基本配置文件
3. 配置应用
替换自动生成的fly.toml
为以下内容:
app = "websockets-echo" # 替换为你的应用名
[build]
builder = "paketobuildpacks/builder:base"
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
[[http_service.checks]]
interval = "15s"
timeout = "5s"
method = "GET"
path = "/healthz"
关键配置说明:
- 监听443端口并自动处理TLS终止
- 将请求转发到内部8080端口
- 配置健康检查端点
- 支持自动启停机器以节省资源
4. 定义启动命令
创建或修改Procfile
文件:
web: python app.py
5. 部署应用
执行部署命令:
fly deploy
部署完成后,Fly会自动执行健康检查并确保应用正常运行。
验证部署
测试WebSocket连接
可以使用websockets库自带的交互式客户端进行测试:
python -m websockets wss://你的应用名.fly.dev/
连接成功后,发送任何消息都会收到相同的回复:
> Hello WebSocket!
< Hello WebSocket!
测试优雅关闭
- 首先建立WebSocket连接
- 在另一个终端执行
fly restart 你的应用名
- 观察客户端连接会收到1001(going away)关闭代码,表明服务器正确处理了关闭信号
如果优雅关闭未正确实现,连接会以1006(abnormal closure)代码中断。
生产环境建议
- 监控与日志:配置Fly的日志收集和监控告警
- 自动扩展:根据负载配置自动扩展规则
- 多区域部署:利用Fly的全球网络进行多区域部署
- 安全加固:配置适当的防火墙规则和访问控制
- 性能优化:根据负载测试结果调整实例规格
常见问题
Q: 如何处理更大的并发连接数? A: 可以调整Fly机器的规格,同时优化代码使用连接池等技术。
Q: 如何实现自定义域名? A: 在Fly控制台添加自定义域名并配置SSL证书。
Q: 如何查看应用日志? A: 使用fly logs
命令或Fly控制台的日志界面。
通过本指南,您应该已经成功将一个完整的WebSocket服务器部署到了Fly.io平台。这个基础架构可以进一步扩展为更复杂的实时应用,如聊天系统、实时协作工具或游戏服务器。
websockets 项目地址: https://gitcode.com/gh_mirrors/web/websockets
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考