使用 FastAPI 进行套接字聊天系统?

LeS*_*low 2 python chat websocket fastapi

如何使用 FastAPI 中的套接字实现一个全面的聊天系统。具体请记住以下几点:

  • 用户之间的多个聊天室多对多
  • 使用 SQL 或 NoSQL 数据库存储消息以实现持久性
  • 安全性:身份验证或可能的加密

我查看了一些库,但遗憾的是,实际有用的实现还很遥远。

任何建议或重定向到获取更多信息的地方都会有很大帮助!

小智 5

  1. 对于聊天室,您可以使用 FastAPI 内置websockets支持,并向其中添加redis pubsubPostgreSQL pg_notify,以便向房间中的所有参与者发送消息。
  2. 由于其悠久的历史和稳定性,在PostgreSQL中存储消息是一个可靠的选择。
  3. 身份验证可以由FastAPI 中的 OAuth2 提供程序处理。授权可以由隐藏在 FastAPI 文档的高级安全部分中的 OAuth2 范围来处理。加密由放置在应用程序前面的HTTPS 和反向代理提供。

没有任何完全现成的库可以提供开箱即用的所有内容。但是,将问题分解成更小的部分,然后解决这些问题会让你走得更远。

  1. 写下您想要存储有关用户、聊天室、消息的哪些字段/数据。
  2. 可能使用 SQLAlchemy 在 FastAPI 中实现这些基本模型。
  3. 将这些模型连接到 api 端点,以便您可以在 Swagger 中使用这些模型(列出聊天室、获取消息并将消息发布到聊天室)。
  4. 在 FastAPI 中实现一个 websocket 端点,它将回显发送给它的所有内容。这应该允许您连接一些客户端 JavaScript 以从 Websocket 发送和接收消息。
  5. 修改现有的消息存储端点以将相同的消息也推送到 Redis 发布主题,并将您的 Websocket 端点更改为订阅 Redis 订阅主题。
  6. 将身份验证添加到您的端点。首先是基本的用户/密码,然后是更高级的配置。
  7. 添加前面带有 https 的反向代理,瞧。