基于 Flask-SSE 实现简单在线聊天室

阅读时长 8 分钟读完

在现今社交网络大行其道的时代,即时通讯已成为人们日常生活不可或缺的一部分。本篇文章将介绍如何基于 Flask-SSE 实现一个简单的在线聊天室。

Flask-SSE

Flask-SSE 提供了简单易用的 Flask 扩展,用于处理服务器推送事件。它是基于 WSGI 的服务器,可以将信息通过 Server-Sent Event 方式发送到客户端。借助 Flask-SSE,我们可以在 Flask 应用程序中实现事件驱动的服务器推送,例如实时财经新闻、即时通讯、股票数据等。

如果你还不熟悉 Flask-SSE,建议先查看 官方文档 及其 GitHub 页面

聊天室实现

Flask 应用程序

首先,创建一个 Flask 应用程序,用于处理聊天室中的各种交互。

其中,app.config["SECRET_KEY"] 用于指定 session 的密钥;app.register_blueprint(sse, url_prefix="/stream") 则用于指定 SSE 扩展的 URL。

页面结构

我们将会实现一个简单的 HTML 页面作为聊天室的界面。首先,创建 views.py,编写视图函数,用于渲染聊天室的 HTML 页面。

渲染 index.html 页面,其中包含三部分内容:

  • 聊天区域,用于显示历史聊天记录
  • 消息输入框,用户可以在其中输入消息
  • 发送按钮,用于将消息推送到聊天室的其他用户
-- -------------------- ---- -------
--------- -----
------
------
    ------------ ---- ---------------
    ----- ----------------
-------
------
    --------- ---- ------------

    ---- ---------------------

    ----- ------------------
        ------ ----------- ------------------ ----------------------
        ------- ---------------------------
    -------

    ------- -----------------------------------------------------------------------
    ------- ---------------------------------
-------
-------

这里使用了 jQuery 库,当然也可以使用其他类似库,如 Axios、Fetch 等。

后端代码

登录

在 login.html 页面中,用户需要输入自己的用户名,之后在 session 中保存记录。如果已经存在 session,则跳过此步骤。

-- -------------------- ---- -------
--------- -----
------
------
    --------------------
    ----- ----------------
-------
------
    --------- ---- ------- - ----------

    ----- ----------------
        ------ ----------- ------------------- -----------------------
        ------- ----------------------------
    -------

    ------- -----------------------------------------------------------------------
    ------- -----------------------------------
-------
-------

在 Flask 中,我们需要定义 login 的 route。其中,使用了 session.permanent = True 将 session 保存到用户的浏览器中,以便下次登录时自动登录。

消息推送

利用 Flask-SSE,我们可以在客户端连接到服务器时,开启一个连接,并在其中发送信息。这样子,当有其他用户发送消息时,会推送到所有连接上的客户端,从而实现即时推送的效果。

-- -------------------- ---- -------
------------------- -----------------
--- -------
    ------- - -
        ----------- --------------------
        ------- ---------------------
        ------------- -------------------
    -
    -------------------- ------------
    ------ ------------------- ------

这里使用了 Flask-SSE 提供的 publish() 函数,将信息推送到所有连接的客户端上。

前端代码

前端代码主要有两个部分:登录以及聊天室消息推送。

登录部分

当用户在登录页面输入用户名并提交时,我们需要将用户名发送到服务器进行验证。

-- -------------------- ---- -------
-------- ----- -- -
    ----------------------
    --- ------------- - -----------------------------------------
    --- -------- - -------------------
    --------------- -
        ------- -------
        ----- --------------------------- -----------
        -------- -
            --------------- ------------------
        -
    --
    -------------- -- ----------------
    ---------- -- -
        -- -------------- -
            ----------------------------
        -
    --
-

消息推送

当用户输入消息并点击发送按钮时,我们需要将消息推送到服务器进行广播。

-- -------------------- ---- -------
-------- ----------- -- -
    ----------------------
    --- ----- - ----------------------------------------
    --- ---- - ------------------
    -- ------- -
        ------
    -
    --- ---- - --- ----------
    ------------------- -----
    -------------- -
        ------- -------
        ----- -----
    --
    -------- -- -
        ----------- - --
    --
-

--- ------ - --- ----------------------
------------------------------- -------- ------- -
    --- ---- - ----------------------
    --- -------- - ------------------------------------
    --- -------------- - -----------------------------
    --- ---- - ------------- - -- - - --------- - - - - - ---------------
    ------------------------ - ----
    ------------------------------------
--

在这里,我们使用 EventSource 对象建立持久连接,当有新消息递交到服务器时,服务器会发送相关数据到客户端并触发相应的事件,从而让我们实现实时聊天室。

总结

本篇文章介绍了如何使用 Flask-SSE 实现简单的在线聊天室。在实现的过程中,我们使用了 Flask、Flask-SSE、jQuery 等工具和库,并且建议读者仔细阅读 Flask-SSE 的文档及源代码,探索 Flask-SSE 的更多特性和用法,进一步提升我们的编程能力。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d4ae6cb5eee0b525c8054f

纠错
反馈