-2

目前,我有一个在 Flask 上运行的动态网站,我想在后端实现一个聊天客户端,该客户端利用将连接到外部服务器的 websockets。因此,例如,当登录用户访问“/聊天”路由时,我想为这个外部聊天服务器启动一个 websocket。

然后,我将在将 JSON 对象 POST 到另一个路由(例如“/send_msg”)的页面上使用 JavaScript 处理发送/接收消息,同时通过从“/receive_msg”获取不断检查新消息。

问题是我在网上看到的每一个教程(包括关于 SO 的问题)都是关于本地 websockets 的,其中烧瓶应用程序本身充当聊天服务器。并且使用python的内置套接字模块并不好(我认为),因为我看不到一种方法可以在用户在页面上时使其保持打开状态,然后在用户离开页面时关闭()-ing它。有没有办法为外部服务器做到这一点?如果是这样,我该怎么做?谢谢!<3

4

1 回答 1

0

我认为您正在混淆您的技术术语

Flask是一个webframework(这里有一些库可以提供websockets),一般来说这与websockets无关

它提供 HTML/JS/CSS ...您将使用 js 连接到您的 websocket 服务器,如下所示

let ws = new WebSocket("ws://my.funky.ws/url")
ws.on_message = (data)=>{
  console.log("Got a websocket message1!!!:",data)
}
ws.on_close = ()=>console.log("Closed websocket connection!")
ws.on_open = () => console.log("Opened websocket server connection successfully!")

您运行 websocket 服务器,javascript(或非 javascript)客户端连接到(python-websocket-server 是一个非常容易使用 iirc),但这通常是与您的烧瓶服务器分开的应用程序,(它仍然可以导入sqlalchemy 模型或函数或其他))

如果您真的只想对posts/gets进行ajax调用来检查消息,您将使用某种数据库表,然后您将新消息放入并定期查询新消息......但这不是websocket服务器...... . 套接字服务器没有历史状态的概念...您只会看到在侦听它们时发送的消息...

于 2020-05-21T19:11:24.877 回答