如何在FastAPI中使用套接字实现一个全面的聊天系统?特别要记住以下几点:
- 多个聊天室用户间多对多
- 使用SQL或NoSQL数据库存储用于持久化的消息
- 安全性:验证或可能加密
我看过一些库,但遗憾的是,实际有用的实现还差很远。
任何建议或重定向到更多信息的地方将是很大的帮助!
- 对于聊天室,您可以使用内置websockets支持的FastAPI,并添加redis pubsub或PostgreSQL pg_notify来向房间中的所有参与者发送消息。 在PostgreSQL中存储消息是一个可靠的选择,因为它具有悠久的历史和稳定性。
- 认证可以由FastAPI中的OAuth2提供商处理。授权可以通过隐藏在FastAPI文档的高级安全部分中的OAuth2作用域来处理。加密是由HTTPS和反向代理提供的,你把它们放在应用程序的前面。
没有任何现成的库可以提供开箱即用的一切。但是把问题分解成更小的部分,然后再解决它们,会让你走得很远。
- 写下你想要存储的关于你的用户、聊天室、消息的字段/数据。
- 在FastAPI中实现这些基本模型,可能使用SQLAlchemy。
- 将这些模型连接到api端点,以便您可以在Swagger中使用这些模型(列出聊天室,获取和发布消息到聊天室)。在FastAPI中实现一个websocket端点,它会回显发送给它的所有内容。这应该允许你连接一些客户端javascript从websocket发送和接收消息。
- 修改你现有的消息存储端点,将相同的消息也推送到redis发布主题,并更改你的websocket端点订阅redis订阅主题。
- 向端点添加身份验证。首先是基本的用户/密码,然后是更高级的配置。
- 添加反向代理与https在前面,瞧。