websocket API
摘要
WebSocket 是一种 JavaScript API 和配套协议,允许您创建“web sockets”,能够在持久的 TCP 连接(socket)上实现双向全双工通信。
- CloseEvent
- 表示 WebSocket 关闭事件的对象。
- WebSocket 对象 API 详情
- 用于创建和管理与服务器的 WebSocket 连接,以及在连接上发送和接收数据的对象。
用法
Writing a WebSocket application in JavaScript is quite simple. Establish a connection, and hook into the open, error, message and close events as necessary. Remember, WebSocket is subject to the same-origin policy, like AJAX. This means if you want to test your client locally, you'll need to run a web server (e.g., python -m SimpleHTTPServer or php -S localhost:8000). Here's a simple example client that should work in newer browsers:
var socket = new WebSocket('ws://:8080/');
socket.onopen = function () {
console.log('Connected!');
};
socket.onmessage = function (event) {
console.log('Received data: ' + event.data);
socket.close();
};
socket.onclose = function () {
console.log('Lost connection!');
};
socket.onerror = function () {
console.log('Error!');
};
socket.send('hello, world!');
为了补充说明,这里提供一个使用 Twisted 的 Python 编写的回显服务器示例
from twisted.internet import protocol, reactor
from txws import WebSocketFactory
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()
reactor.listenTCP(8080, WebSocketFactory(EchoFactory()))
reactor.run()
备注
与标准的 HTTP 类似,WebSocket 默认使用端口 80 进行明文通信,使用端口 443 进行 SSL 通信。WebSocket 客户端建立 HTTP 连接并请求使用 HTTP Upgrade 机制切换协议,然后遵循握手协议以确保客户端和服务器都支持 WebSocket。由于 WebSocket 连接以 HTTP 启动,WebSocket 可以穿透许多现有的代理和防火墙,而某些其他协议则不行。
一旦建立连接,消息将以文本或二进制格式作为“帧”在两个方向上传输。这些是在 JavaScript 中发送和接收的数据字符串。
WebSocket URI 具有与 HTTP URI 相同的基本格式,但具有不同的 URI 方案:ws://hostname:port/path,例如 ws://example.com/echo 或 ws://example.net:8080。路径可用于区分连接的目的;但是,某些服务器会忽略它。安全的 WebSocket(通过 SSL/TLS 的 WebSocket)URI 以 wss:// 开头,而不是 ws://。
参见
外部资源
- http://tools.ietf.org/html/rfc6455 - IETF WebSocket 协议
- https://w3org.cn/TR/websockets/ - W3C WebSocket API
- http://www.websocket.org/echo.html - WebSocket 回显测试
- https://caniuse.cn/#search=websockets - 浏览器支持
- http://ajf.me/websocket/ - 包含大多数流行编程语言的库和框架列表
- http://www.html5rocks.com/en/tutorials/websockets/basics/ - html5rocks 提供的优秀教程
署名
Microsoft Developer Network: Windows Internet Explorer API 参考文章