---
title: WebSocket
slug: Web/API/WebSocket
tags:
  - API
  - WebSocket
  - WebSockets
translation_of: Web/API/WebSocket
---
<div>{{APIRef("Web Sockets API")}}</div>

<p><code>WebSocket</code> 对象提供了用于创建和管理 <a href="/zh-CN/docs/Web/API/WebSockets_API" title="zh-CN/WebSockets">WebSocket</a> 连接,以及可以通过该连接发送和接收数据的 API。</p>

<p>使用<code><a href="/en-US/docs/Web/API/WebSocket/WebSocket"> WebSocket()</a></code><a href="/en-US/docs/Web/API/WebSocket/WebSocket"> </a>构造函数来构造一个<code> WebSocket</code> 。</p>

<h2 id="构造函数">构造函数</h2>

<dl>
 <dt>{{domxref("WebSocket.WebSocket", "WebSocket(url[, protocols])")}}</dt>
 <dd>返回一个 <code>WebSocket</code> 对象。</dd>
</dl>

<h2 id="常量">常量</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <td><strong>Constant</strong></td>
   <td><strong>Value</strong></td>
  </tr>
  <tr>
   <td><code>WebSocket.CONNECTING</code></td>
   <td><code>0</code></td>
  </tr>
  <tr>
   <td><code>WebSocket.OPEN</code></td>
   <td><code>1</code></td>
  </tr>
  <tr>
   <td><code>WebSocket.CLOSING</code></td>
   <td><code>2</code></td>
  </tr>
  <tr>
   <td><code>WebSocket.CLOSED</code></td>
   <td><code>3</code></td>
  </tr>
 </tbody>
</table>

<h2 id="属性">属性</h2>

<dl>
 <dt>{{domxref("WebSocket.binaryType")}}</dt>
 <dd>使用二进制的数据类型连接。</dd>
 <dt>{{domxref("WebSocket.bufferedAmount")}} {{readonlyinline}}</dt>
 <dd>未发送至服务器的字节数。</dd>
</dl>

<dl>
 <dt>{{domxref("WebSocket.extensions")}} {{readonlyinline}}</dt>
 <dd>服务器选择的扩展。</dd>
</dl>

<dl>
 <dt>{{domxref("WebSocket.onclose")}}</dt>
 <dd>用于指定连接关闭后的回调函数。</dd>
 <dt>{{domxref("WebSocket.onerror")}}</dt>
 <dd>用于指定连接失败后的回调函数。</dd>
 <dt>{{domxref("WebSocket.onmessage")}}</dt>
 <dd>用于指定当从服务器接受到信息时的回调函数。</dd>
 <dt>{{domxref("WebSocket.onopen")}}</dt>
 <dd>用于指定连接成功后的回调函数。</dd>
 <dt>{{domxref("WebSocket.protocol")}} {{readonlyinline}}</dt>
 <dd>服务器选择的下属协议。</dd>
 <dt>{{domxref("WebSocket.readyState")}} {{readonlyinline}}</dt>
 <dd>当前的链接状态。</dd>
 <dt>{{domxref("WebSocket.url")}} {{readonlyinline}}</dt>
 <dd>WebSocket 的绝对路径。</dd>
</dl>

<h2 id="Method_overview" name="Method_overview">方法</h2>

<dl>
 <dt>{{domxref("WebSocket.close", "WebSocket.close([code[, reason]])")}}</dt>
 <dd>关闭当前链接。</dd>
 <dt>{{domxref("WebSocket.send", "WebSocket.send(data)")}}</dt>
 <dd><span>对要传输的数据进行排队</span>。</dd>
</dl>

<h2 id="事件">事件</h2>

<p>使用 <code>addEventListener()</code> 或将一个事件监听器赋值给本接口的 <code>on<em>eventname</em></code> 属性,来监听下面的事件。</p>

<dl>
 <dt>{{domxref("WebSocket/close_event", "close")}}</dt>
 <dd>当一个 <code>WebSocket</code> 连接被关闭时触发。<br>
 也可以通过 {{domxref("WebSocket/onclose", "onclose")}} 属性来设置。</dd>
 <dt>{{domxref("WebSocket/error_event", "error")}}</dt>
 <dd>当一个 <code>WebSocket</code> 连接因错误而关闭时触发,例如无法发送数据时。<br>
 也可以通过 {{domxref("WebSocket/onerror", "onerror")}} 属性来设置.</dd>
 <dt>{{domxref("WebSocket/message_event", "message")}}</dt>
 <dd>当通过 <code>WebSocket</code> 收到数据时触发。<br>
 也可以通过 {{domxref("WebSocket/onmessage", "onmessage")}} 属性来设置。</dd>
 <dt>{{domxref("WebSocket/open_event", "open")}}</dt>
 <dd>当一个 <code>WebSocket</code> 连接成功时触发。<br>
 也可以通过 {{domxref("WebSocket/onopen", "onopen")}} 属性来设置。</dd>
</dl>

<h2 id="Attributes" name="Attributes">示例</h2>

<pre class="brush: js line-numbers language-js">// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');

// Connection opened
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
    console.log('Message from server ', event.data);
});
</pre>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <td>规范</td>
   <td>状态</td>
   <td>注释</td>
  </tr>
  <tr>
   <td>{{SpecName("HTML WHATWG", "web-sockets.html#the-websocket-interface", "WebSocket")}}</td>
   <td>{{Spec2("HTML WHATWG")}}</td>
   <td>初始定义</td>
  </tr>
 </tbody>
</table>

<ul>
</ul>

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

<p>{{Compat("api.WebSocket")}}</p>

<h2 id="See_also" name="See_also">相关链接</h2>

<ul>
 <li><a href="/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications" title="/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications">Writing WebSocket client applications</a></li>
</ul>

<p>
 <audio class="hidden"></audio>
</p>