Socket.io 的常用 API 与一些小例子

阅读时长 9 分钟读完

Socket.io 的常用 API 与一些小例子

Socket.io 是一个基于 Node.js 的 JavaScript 库,它实现了实时、双向、基于事件的通信。Socket.io 可以在浏览器和服务器之间建立持久连接,从而允许服务器向所有连接的客户端实时广播数据,如实时聊天、协同编辑等应用。在本文中,我们将介绍 Socket.io 的常用 API,并演示一些使用场景和代码示例。

1. 客户端连接服务器

客户端可以使用以下代码连接服务器:

其中,参数是服务器的 URL 地址,需要与服务器的地址匹配。如果服务器端口是默认的 80 端口,则可以省略端口号。连接成功后,我们可以使用 socket.emit 发送事件,或者使用 socket.on 监听服务器广播的事件。

2. 发送消息

客户端可以通过 socket.emit 发送消息给服务器:

其中,第一个参数是事件名称,后面的参数是事件数据。服务器可以使用 socket.on 监听该事件,接收事件数据:

这里是一个简单的聊天室应用的例子,在这个应用中,客户端可以向服务器发送消息,服务器广播消息到所有客户端:

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

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

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

在这个例子中,服务器会监听 connection 事件,每当有客户端连接到服务器时,会输出一条消息。客户端可以通过表单发送文本消息,服务器会广播这个消息到所有客户端。这个聊天室应用的完整代码可以在 GitHub 上查看。

3. 加入和离开房间

Socket.io 也支持将客户端分组到不同的房间中。可以使用 socket.join 将客户端加入房间,使用 socket.leave 将客户端离开房间:

然后可以使用 io.tosocket.broadcast.to 发送消息到某个房间的所有客户端:

下面是一个使用房间的例子,客户端会随机加入两个房间,发送消息时会指定消息所属的房间:

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

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

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

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

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

在这个例子中,客户端可以点击按钮加入房间,然后发送消息给指定房间的客户端。服务器会连续输出一些日志,包括有哪些客户端加入了哪些房间等信息。这样的实现方式可以将不同的客户端分组到不同的房间中,便于进行分组广播等操作。

4. 其他 API

除了上述 API 外,Socket.io 还提供了一些其他的 API,包括:socket.emitsocket.onsocket.oncesocket.offsocket.listenerssocket.hasListenerssocket.compress 等。这些 API 具体的用法可以参考官方文档。

总结

Socket.io 是一个非常强大和实用的库,可以方便地实现基于事件的实时双向通信。在本文中,我们介绍了 Socket.io 的常用 API,并演示了一些使用场景和代码示例。如果你想了解更多关于 Socket.io 的知识,请参考官方文档,或者查阅相关文献资料。

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

纠错
反馈