aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/websockets_api/index.html
blob: ecc7894c382a60dba722c9816af054b5c758104e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
---
title: WebSockets
slug: Web/API/WebSockets_API
tags:
  - References
  - WebSockets
translation_of: Web/API/WebSockets_API
---
<p>{{DefaultAPISidebar("Websockets API")}}</p>

<p><strong>WebSockets</strong> 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。</p>

<h2 id="接口">接口</h2>

<dl>
 <dt><a href="/en-US/docs/Web/API/WebSocket" title="en/WebSockets/WebSockets reference/WebSocket"><code>WebSocket</code></a></dt>
 <dd>用于连接WebSocket服务器的主要接口,之后可以在这个连接上发送 和接受数据。</dd>
 <dt><code><a href="/en-US/docs/Web/API/CloseEvent" title="en/WebSockets/WebSockets reference/CloseEvent">CloseEvent</a></code></dt>
 <dd>连接关闭时WebSocket对象发送的事件。</dd>
 <dt><a href="/en-US/docs/Web/API/MessageEvent" title="en/WebSockets/WebSockets reference/MessageEvent"><code>MessageEvent</code></a></dt>
 <dd>当从服务器获取到消息的时候WebSocket对象触发的事件。</dd>
</dl>

<h2 class="Tools" id="Tools" name="Tools">工具</h2>

<ul>
 <li><a href="https://hacks.mozilla.org/2017/06/introducing-humblenet-a-cross-platform-networking-library-that-works-in-the-browser/">HumbleNet</a>: 一个在浏览器中工作的跨平台网络库。它由一个围绕websocket和WebRTC的C包装器组成,抽象了跨浏览器的差异,方便了为游戏和其它应用程序创建多用户网络功能。</li>
 <li><a href="https://github.com/uWebSockets/uWebSockets">µWebSockets</a>:由<a href="https://isocpp.org/">C++11</a><a href="http://nodejs.org/" title="http://nodejs.org/">Node.js</a> 实现的高度可扩展的WebSocket服务器和客户端.。</li>
 <li><a href="https://github.com/ClusterWS/ClusterWS">ClusterWS</a>:  轻量级、快速和强大的框架,用于在<a href="http://nodejs.org/" title="http://nodejs.org/">Node.js</a>.中构建可伸缩的WebSocket应用程序。</li>
 <li><a class="external" href="http://socket.io" title="http://socket.io/">Socket.IO</a>: 一个基于长轮询/WebSocket的<a href="http://nodejs.org" title="http://nodejs.org/">Node.js</a>第三方传输协议。</li>
 <li><a href="http://socketcluster.io/">SocketCluster</a>: 一个用于<a href="http://nodejs.org" title="http://nodejs.org/">Node.js</a>的pub/sub专注于可伸缩 WebSocket框架。</li>
 <li><a href="https://github.com/Worlize/WebSocket-Node" title="https://github.com/Worlize/WebSocket-Node">WebSocket-Node</a>: 一个用 <a href="http://nodejs.org/" title="http://nodejs.org/">Node.js</a>实现WebSocket服务器API。</li>
 <li><a href="http://www.totaljs.com/">Total.js</a>:一个用<a href="http://www.nodejs.org/">Node.js</a> 实现的的Web应用程序框架(例如:WebSocket聊天)。</li>
 <li><a href="https://www.npmjs.com/package/faye-websocket">Faye</a>: 一个 <a href="http://nodejs.org/" title="http://nodejs.org/">Node.js</a><a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> (双向连接)和 <a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource/">EventSource</a> (单向连接)的服务器和客户端。</li>
 <li><a href="http://signalr.net/">SignalR</a>: SignalR在可用时将隐藏使用WebSockets,在不可用时将优雅地使用其他技术和技术,而应用程序代码保持不变。</li>
 <li><a href="https://caddyserver.com/docs/websocket">Caddy</a>: 能够将任意命令(stdin/stdout)代理为websocket的web服务器。</li>
 <li><a href="https://github.com/websockets/ws">ws</a>: 一个流行的WebSocket客户端和服务器 <a href="http://nodejs.org/" title="http://nodejs.org/">Node.js</a>库。</li>
 <li><a href="https://github.com/bigstepinc/jsonrpc-bidirectional">jsonrpc-bidirectional</a>: 易于使用异步RPC库,通过单个WebSocket或RTCDataChannel (WebRTC)连接支持双向调用。TCP / SCTP /等。客户端和服务器可以各自承载自己的JSONRPC和服务器端点。</li>
 <li><a href="https://github.com/elpheria/rpc-websockets">rpc-websockets</a>: JSON-RPC 2.0在websocket上实现Node.js和JavaScript。</li>
</ul>

<h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">相关话题</h2>

<ul>
 <li><a href="/en-US/docs/AJAX" title="AJAX">AJAX</a></li>
 <li><a href="/en-US/docs/JavaScript" title="JavaScript">JavaScript</a></li>
</ul>

<h2 id="参见">参见</h2>

<ul>
 <li><a class="external" href="http://tools.ietf.org/html/rfc6455">RFC 6455 — The WebSocket Protocol</a></li>
 <li><a class="external" href="http://www.w3.org/TR/websockets/">WebSocket API Specification</a></li>
 <li><a href="/en-US/docs/Server-sent_events" title="Server-sent_events">Server-Sent Events</a></li>
</ul>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>{{CompatibilityTable}}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Chrome</th>
   <th>Edge</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Version -76 support {{obsolete_inline}}</td>
   <td>6</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatGeckoDesktop("2.0")}}</td>
   <td>{{CompatNo}}</td>
   <td>11.00 (disabled)</td>
   <td>5.0.1</td>
  </tr>
  <tr>
   <td>Protocol version 7 support {{obsolete_inline}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatGeckoDesktop("6.0")}}<br>
    {{property_prefix("Moz")}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
  </tr>
  <tr>
   <td>Protocol version 10 support {{obsolete_inline}}</td>
   <td>14</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatGeckoDesktop("7.0")}}<br>
    {{property_prefix("Moz")}}</td>
   <td>HTML5 Labs</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
  <tr>
   <td>Standard - RFC 6455 Support</td>
   <td>16</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatGeckoDesktop("11.0")}}</td>
   <td>10</td>
   <td>12.10</td>
   <td>6.0</td>
  </tr>
  <tr>
   <td>Usable in Workers</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatGeckoDesktop("37.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Feature</th>
   <th>Android</th>
   <th>Edge</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Version -76 support {{obsolete_inline}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
  <tr>
   <td>Protocol version 7 support {{obsolete_inline}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
  <tr>
   <td>Protocol version 8 support (IETF draft 10) {{obsolete_inline}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatGeckoMobile("7.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
  <tr>
   <td>Standard - RFC 6455 Support</td>
   <td>4.4</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatGeckoDesktop("11.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>12.10</td>
   <td>6.0</td>
  </tr>
  <tr>
   <td>Usable in Workers</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatGeckoMobile("37.0")}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<h3 id="Gecko_notes">Gecko notes</h3>

<p>Firefox中的WebSocket支持正在继续跟踪WebSocket规范的发展。Firefox 6实现了底层协议的version 7,而Firefox 7实现了version 8(如IETF draft 10所指定的)。Firefox移动版在Firefox7.0支持WebSocket。</p>

<h4 id="Gecko_6.0">Gecko 6.0</h4>

<p>在Gecko 6.0 {{geckoRelease("6.0")}}之前,一些网站认为<code>WebSocket</code>对象是错误的,意味着<code>WebSocket</code>服务没有前缀,此对象已重命名为<code>MozWebSocket</code></p>

<h4 id="Gecko_7.0">Gecko 7.0</h4>

<p>从Gecko 7.0 {{geckoRelease("7.0")}}中开始,<code>network.websocket.max-connections是</code>用于确定每次可以打开的WebSocket连接的最大数量的最大连接首选项。默认值是200。</p>

<h4 id="Gecko_8.0">Gecko 8.0</h4>

<p>从Gecko 8.0 {{geckoRelease("8.0")}}中开始,<code>WebSocket</code>协议的deflate-stream扩展已经被禁用,因为它已经在规范草案中废弃了。这解决了某些站点的不兼容性问题。</p>

<h4 id="Gecko_11.0">Gecko 11.0</h4>

<p>在Gecko 11.0之前,传入和传出消息的大小都限制在16MB。它们现在的大小可能高达 2 GB 。然而,请注意,内存限制(尤其是在移动设备上)使其成为理论上的最大限制,而不是实际的最大限制。实际上,在没有足够内存的设备上,这种大小的传输将会失败。</p>

<p>此外,ArrayBuffer对二进制数据的收发支持已经实现。</p>

<p><br>
 从Gecko 11.0开始,WebSocket API不需要前缀。</p>