内部( Internals)
在本章中,我们将讨论使用Socket.IO,事件和消息进行回退,连接。
Fallbacks
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握手通过握手URI上的POST请求(传递给connect方法)在HTTP上进行。
事件和消息
WebSocket本机API仅发送消息。 Socket.IO为这些消息提供了一个附加层,允许我们创建事件,并通过分离发送的不同类型的消息再次帮助我们轻松地开发应用程序。
本机API仅以纯文本形式发送消息。 这也由Socket.IO负责。 它为我们处理数据的序列化和反序列化。
我们有一个官方客户端API用于网络。 对于其他客户端,如本机移动电话,其他应用程序客户端,我们也可以使用Socket.IO使用以下步骤。
Step 1 - 需要使用上面讨论的相同连接协议建立连接。
Step 2 - 消息需要与Socket.IO指定的格式相同。 此格式使Socket.IO能够确定消息的类型以及消息中发送的数据以及一些对操作有用的元数据。
邮件格式为 -
[type] : [id ('+')] : [endpoint] (: [data]
上述命令中的参数说明如下 -
Type是单个数字整数,指定它是什么类型的消息。
ID是消息ID,用于确认的增量整数。
Endpoint是要将消息传递到的套接字端点...
Data是要传递到套接字的关联数据。 对于消息,它被视为纯文本,对于其他事件,它被视为JSON。
在下一章中,我们将在Socket.IO中编写一个聊天应用程序。