- Socket.IO 教程
- Socket.IO - 首页
- Socket.IO - 概述
- Socket.IO - 环境
- Socket.IO - Hello world
- Socket.IO - 事件处理
- Socket.IO - 广播
- Socket.IO - 命名空间
- Socket.IO - 房间
- Socket.IO - 错误处理
- Socket.IO - 日志记录和调试
- Socket.IO - 内部机制
- Socket.IO - 聊天应用
- Socket.IO 有用资源
- Socket.IO - 快速指南
- Socket.IO - 有用资源
- Socket.IO - 讨论
Socket.IO - 内部机制
本章将讨论回退机制、使用 Socket.IO 的连接、事件和消息。
回退机制
Socket.IO 具有许多底层的传输机制,这些机制处理由于跨浏览器问题、WebSocket 实现、防火墙、端口阻塞等引起的各种约束。
虽然 W3C 为 WebSocket API 定义了规范,但其实现仍然不足。Socket.IO 为我们提供了回退机制,可以处理此类问题。如果我们使用原生 API 开发应用程序,则必须自己实现回退机制。Socket.IO 按以下顺序涵盖了大量的回退机制:
- WebSockets
- FlashSocket
- XHR 长轮询
- XHR 多部分流
- XHR 轮询
- JSONP 轮询
- iframes
使用 Socket.IO 的连接
Socket.IO 连接始于握手。这使得握手成为协议的特殊部分。除了握手之外,协议中的所有其他事件和消息都通过套接字传输。
Socket.IO 旨在与 Web 应用程序一起使用,因此假设这些应用程序将始终能够使用 HTTP。正是由于这个原因,Socket.IO 握手通过 HTTP 使用对握手 URI(传递给连接方法)的 POST 请求进行。
事件和消息
WebSocket 原生 API 仅发送跨消息。Socket.IO 在这些消息之上提供了一个附加层,这允许我们创建事件,并再次帮助我们通过分离发送的不同类型的消息来轻松开发应用程序。
原生 API 仅以纯文本形式发送消息。Socket.IO 也处理了这个问题。它为我们处理数据的序列化和反序列化。
我们有一个用于 Web 的官方客户端 API。对于其他客户端,例如原生手机、其他应用程序客户端,我们也可以使用以下步骤使用 Socket.IO。
步骤 1 - 需要使用上面讨论的相同连接协议建立连接。
步骤 2 - 消息需要与 Socket.IO 指定的格式相同。此格式使 Socket.IO 能够确定消息的类型以及消息中发送的数据以及对操作有用的某些元数据。
消息格式为:
[type] : [id ('+')] : [endpoint] (: [data]
上面命令中的参数解释如下:
类型 是一个一位整数,指定它是哪种类型的消息。
ID 是消息 ID,一个用于确认的增量整数。
端点 是预期将消息传递到的套接字端点……
数据 是要传递到套接字的关联数据。对于消息,它被视为纯文本;对于其他事件,它被视为 JSON。
在下一章中,我们将用 Socket.IO 编写一个聊天应用程序。