📜  Socket.IO-内部原理

📅  最后修改于: 2020-11-02 04:55:05             🧑  作者: Mango


在本章中,我们将讨论回退,使用Socket.IO的连接,事件和消息。

后备

Socket.IO具有许多基础的传输机制,可以处理由于跨浏览器问题,WebSocket实现,防火墙,端口阻塞等而引起的各种约束。

尽管W3C具有针对WebSocket API的已定义规范,但仍缺乏实现。 Socket.IO为我们提供了可处理此类问题的后备机制。如果我们使用本机API开发应用,则必须自己实现后备。 Socket.IO按照以下顺序涵盖了大量的故障预置-

  • Web套接字
  • FlashSocket
  • XHR长轮询
  • XHR多部分流
  • XHR轮询
  • JSONP轮询
  • iframe

使用Socket.IO进行连接

Socket.IO连接从握手开始。这使得握手成为协议的特殊部分。除了握手之外,协议中的所有其他事件和消息都通过套接字传输。

Socket.IO旨在与Web应用程序一起使用,因此假定这些应用程序将始终能够使用HTTP。正是由于这个原因,Socket.IO握手是通过HTTP使用握手URI(传递给connect方法)上的POST请求进行的。

活动和讯息

WebSocket本机API仅跨发送消息。 Socket.IO在这些消息上提供了一个附加层,它使我们可以创建事件,并通过分离发送的不同类型的消息来再次帮助我们轻松开发应用程序。

本机API仅以纯文本形式发送消息。 Socket.IO也会处理此问题。它为我们处理数据的序列化和反序列化。

我们有一个官方的网络客户端API。对于其他客户端(例如本地移动电话),其他应用程序客户端也可以通过以下步骤使用Socket.IO。

步骤1-需要使用上面讨论的相同连接协议建立连接。

步骤2-消息必须采用Socket.IO指定的格式。这种格式使Socket.IO可以确定消息的类型以及消息中发送的数据以及一些对操作有用的元数据。

消息格式是-

[type] : [id ('+')] : [endpoint] (: [data]

上面命令中的参数说明如下-

  • Type是一个一位整数,指定它是什么类型的消息。

  • ID是消息ID,是用于确认的增量整数。

  • 端点是要将消息传递到的套接字端点。

  • 数据是要传递到套接字的关联数据。对于消息,它被视为纯文本,对于其他事件,它被视为JSON。

在下一章中,我们将在Socket.IO中编写一个聊天应用程序。