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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
---
title: The WebSocket API (WebSockets)
slug: Web/API/WebSockets_API
tags:
- API
- Client
- Communication
- NeedsTranslation
- Overview
- Server
- TopicStub
- Two-Way
- WebSocket
- WebSocket API
- WebSockets
- data
- interactive
translation_of: Web/API/WebSockets_API
---
<p>{{DefaultAPISidebar("Websockets API")}}</p>
<p>Các <strong>WebSocket API</strong> là một công nghệ tiên tiến mà nó có thể tạo ra một phiên giao tiếp tương tác hai chiều giữa trình duyệt của người dùng và một máy chủ (server). Với API này, bạn có thể gửi những thông báo tới một máy chủ và nhận những phản hồi (response) hướng sự kiện (event-driven) mà không phải liên tục gửi yêu cầu máy chủ để nhận một câu trả lời.</p>
<div class="note">
<p><strong>Chú ý:</strong> Mặc dù một kết nối Websocket có một số tính năng hơi giống với các socket kiểu Unix chuẩn, Nhưng chúng lại không có liên quan gì với nhau.</p>
</div>
<h2 id="Giao_diện_(Interfaces)">Giao diện (Interfaces)</h2>
<dl>
<dt><a href="/en-US/docs/Web/API/WebSocket" title="en/WebSockets/WebSockets reference/WebSocket"><code>WebSocket</code></a></dt>
<dd>Một giao diện cơ bản cho việc kết nối tới một máy chủ Websocket và sau đó là việc gửi và nhận dữ liệu trên kết nối đó.</dd>
<dt><code><a href="/en-US/docs/Web/API/CloseEvent" title="en/WebSockets/WebSockets reference/CloseEvent">CloseEvent</a></code></dt>
<dd>Sự kiện được gửi đi từ một đối tượng Websocket khi kết nối được đóng lại.</dd>
<dt><a href="/en-US/docs/Web/API/MessageEvent" title="en/WebSockets/WebSockets reference/MessageEvent"><code>MessageEvent</code></a></dt>
<dd>Sự kiện được gửi bởi đối tượng Websocket khi một thông điệp được nhận từ một máy chủ.</dd>
</dl>
<h2 class="Tools" id="Tools" name="Tools">Công cụ</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>: Một thư viện kết nối mạng đa nền tảng làm việc trong trình duyệt. Nó bao gồm một trình bao bọc Websocket và WebRTC viết bằng C mà khái quát những sự khác biệt trên trình duyệt, tạo sự thuận lợi cho việc phát triển các game và ứng dụng với kết nối nhiều người dùng cùng lúc.</li>
<li><a href="https://github.com/uWebSockets/uWebSockets">µWebSockets</a>: Triển khai máy chủ Websocket và ứng dụng phía người dùng với khả năng mở rộng cao hơn cho nền tảng C++ 11 và NodeJS.</li>
<li><a href="https://github.com/ClusterWS/ClusterWS">ClusterWS</a>: Một Framework nhẹ, nhanh và mạnh mẽ dể xây dựng các ứng dụng Websocket có khả năng mở rộng trên nền tảng NodeJS.</li>
<li><a class="external" href="http://socket.io" title="http://socket.io/">Socket.IO</a>: Một thư viện chuyển đổi giao thức bên thứ ba dựa trên nền tảng long polling/WebSocket cho <a class="external" href="http://nodejs.org" title="http://nodejs.org/">Node.js</a>.</li>
<li><a href="http://socketcluster.io/">SocketCluster</a>: Một pub/sub WebSocket framework cho <a class="external" href="http://nodejs.org" title="http://nodejs.org/">Node.js</a> với sự tập trung vào khả năng mở rộng.</li>
<li><a class="link-https" href="https://github.com/Worlize/WebSocket-Node" title="https://github.com/Worlize/WebSocket-Node">WebSocket-Node</a>: Một triển khai các API máy chủ WebSocket cho <a class="external" href="http://nodejs.org" title="http://nodejs.org/">Node.js</a>.</li>
<li><a href="http://www.totaljs.com">Total.js</a>: Một framework làm ứng dụng web cho <a href="http://www.nodejs.org">Node.js</a> (Ví dụ: <a href="https://github.com/totaljs/examples/tree/master/websocket">WebSocket chat</a>)</li>
<li><a href="https://www.npmjs.com/package/faye-websocket">Faye</a>: Một kết nối <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">WebSocket</a> (kết nối hai chiều) và <a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource/">EventSource</a> (Kết nối một chiều) cho ứng dụng và máy chủ <a class="external" href="http://nodejs.org" title="http://nodejs.org/">Node.js</a>.</li>
<li><a href="http://signalr.net/">SignalR</a>: SignalR sẽ sử dụng WebSockets bên dưới dụng vỏ bọc khi nó khả dụng, và dự phòng chuyển đổi với các kí thuật và công nghệ khác khi nó không còn khả dụng, trong khi mã nguồn ứng dụng của bạn vẫn được giữ nguyên.</li>
<li><a href="https://caddyserver.com/docs/websocket">Caddy</a>: Máy chủ web có khả năng ủy quyền các lệnh tùy ý (vào/ra) như một websocket.</li>
<li><a href="https://github.com/websockets/ws">ws</a>: Một thư viện websocket phổ biến cho cả máy chủ và client trên <a href="https://nodejs.org/en/">Node.js</a>.</li>
<li><a href="https://github.com/bigstepinc/jsonrpc-bidirectional">jsonrpc-bidirectional</a>: Asynchronous RPC which, trên một kết nối đơn,có thể có những tính năng đã xuất trên cả máy chủ và máy khách cùng lúc (máy khách gọi máy chủ hoặc ngược lại).</li>
</ul>
<h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Chủ đề liên quan</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>
<p> </p>
<h2 id="Đặc_tả">Đặc tả</h2>
<table>
<thead>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comments</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName("HTML WHATWG", "web-sockets.html", "WebSocket API")}}</td>
<td>{{Spec2("HTML WHATWG")}}</td>
<td> </td>
</tr>
<tr>
<td><a href="https://www.w3.org/TR/websockets/">WebSockets</a></td>
<td><span class="spec-CR">Candidate Recommendation</span></td>
<td> </td>
</tr><tr>
<td>{{RFC(6455, "The WebSocket Protocol")}}</td>
<td><span class="spec-RFC">IETF RFC</span></td>
<td> </td>
</tr>
</tbody>
</table>
<p> </p>
<h2 id="Xem_thêm">Xem thêm</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="Khả_năng_tương_thích_với_các_trình_duyệt">Khả năng tương thích với các trình duyệt</h2>
<p>{{CompatibilityTable}}</p>
<div id="compat-desktop">
<table class="compat-table">
<tbody>
<tr>
<th>Tính năng</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>43</td>
<td>14</td>
<td>{{CompatGeckoDesktop("48.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>(Yes)</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="Chú_ý_về_Gecko">Chú ý về Gecko</h3>
<p>Việc hỗ trợ Websocket trên Firefox đang được tiếp tục với việc theo dõi sư thay đổi của đặc tả Websocket. Firefox 6 triển khai phiên bản 7 của các giao thức cơ bản, trong khi Firefox 7 triển khai phiên bản 8 (như mô tả bởi IETF draft 10). Firefox di đông đón nhận sự hỗ trợ WebSocket từ phiên bản Firefox di động 7.0.</p>
<h4 id="Gecko_6.0">Gecko 6.0</h4>
<p>Trước Gecko 6.0 {{geckoRelease("6.0")}}, Đã có, không chính xác, một đối tượng <code>WebSocket</code> mà một số trang đã nghĩ rằng đó là việc bao hàm các dịch vụ <code>WebSocket</code> không có tiền tố; Đối tượng này vừa được đổi tên thành <code>MozWebSocket</code>.</p>
<h4 id="Gecko_7.0">Gecko 7.0</h4>
<p>Bắt đầu từ phiên bản Gecko 7.0 {{geckoRelease("7.0")}}, <code>thông số network.websocket.max-connections</code> được sử dụng để xác định số lượng kết nối websocket tối đa có thể được mở trong một khoảng thời gian nhất định. Giá trị mặc định là 200.</p>
<h4 id="Gecko_8.0">Gecko 8.0</h4>
<p>Bắt đầu từ phiên bản Gecko 8.0 {{geckoRelease("8.0")}}, phần mở rộng của luồng deflate-stream tới giao thức WebSocket đã bị vô hiệu hóa, bởi vì nó không còn được dùng trong các bản đặc tả. Điều này giải quyết vấn đề không tương thích giữa một số trang web.</p>
<h4 id="Gecko_11.0">Gecko 11.0</h4>
<p>Trước phiên bản Gecko 11.0, Cả thông điệp đến và đi đều bị giới hạn ở kích thức 16MB. Bây giờ chúng có thể lên đến kích thước 2GB. Chú ý, tuy vậy vẫn còn tùy thuộc vào kích thước bộ nhớ (đặc biệt là trên thiết bị di động) làm cho nó chỉ là kích thước lý thuyết không phải là kích thước thực tế. Trong thực tế, việc truyền các dữ liệu kích thước như vậy sẽ thất bại nếu thiết bị không có đủ bộ nhớ.</p>
<p>Ngoài ra, ArrayBuffer hỗ trợ cho việc gửi và nhận dữ liệu nhị phân đã được triển khai.</p>
<p>Kể từ phiên bản Gecko 11.0, API Websocket không còn được thêm tiền tố nữa.</p>
|