websocket 使用FastAPI的套接字聊天系统?

muk1a3rh  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(305)

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

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

我看过一些库,但遗憾的是,实际有用的实现还远远不够。
任何建议或重定向到更多信息的地方将是很大的帮助!

gg0vcinb

gg0vcinb1#

1.对于聊天室,您可以使用FastAPI内置的websockets支持,并添加redis pubsubPostgreSQL pg_notify,以便向聊天室中的所有参与者发送消息。
1.在PostgreSQL中存储消息是一个可靠的选择,因为它具有悠久的历史和稳定性。
1.身份验证可由OAuth2 provider in FastAPI处理。授权可由隐藏在FastAPI文档的“高级安全性”部分中的OAuth2作用域处理。加密由放在应用前面的HTTPS和reverse proxy提供。
没有任何现成的库可以提供开箱即用的所有功能,但是将问题分解成更小的部分,然后在这些部分上工作会让你走得很远。
1.写下你想存储的关于你的用户、聊天室、消息的字段/数据。
1.可能使用SQLAlchemy在FastAPI中实现这些基本模型。
1.把这些模型连接到API端点,这样你就可以在Swagger中使用这些模型(列出聊天室,获取和发布消息到聊天室)。
1.在FastAPI中实现一个WebSocket端点,它将回送发送给它的所有消息。这应该允许您连接一些客户端javascript,用于从websocket发送和接收消息。
1.修改你现有的消息存储端点,将相同的消息也推送到redis发布主题,并修改你的WebSocket端点订阅redis订阅主题。
1.向端点添加身份验证。首先是基本的用户/密码,然后是更高级的配置。
1.在前面添加https的反向代理,瞧。

相关问题