是的,websockets 是双向的。一个重要的结果是您可以有效地将数据从服务器推送到客户端。
底层套接字只是保持打开状态(如果无法保持打开状态,则在需要时重新打开)。请注意,HTTP 1.1 尚未这样做:
HTTP/1.1 是原始 HTTP (HTTP/1.0) 的修订版。在 HTTP/1.0 中,每个资源请求都会建立到同一服务器的单独连接。HTTP/1.1 可以在页面交付后多次重用连接来下载图像、脚本、样式表等。因此,HTTP/1.1 通信的延迟更少,因为 TCP 连接的建立会带来相当大的开销。
它必须在客户端和服务器端都进行处理。当然这意味着这两个软件都需要更新(旧的浏览器和旧的服务器不能处理 websockets)。
编辑(在评论交流之后):
客户端,这是如何初始化连接的:
var ws = new WebSocket('ws://'+document.location.host+'/ws');
ws.onopen = function() {
// do something
};
ws.onerror = function() {
// do something
};
ws.onclose = function() {
// do something
};
ws.onmessage = function(msgevent) {
var msg = JSON.parse(msgevent.data);
// handle incoming message
};
您保留 ws 变量,然后您可以使用相同的连接从客户端推送到服务器
ws.send(window.JSON.stringify(msg)); // msg is a basic js object