我使用Java Tomcat作为websocket服务器。
我认为websocket和http流媒体之间的主要区别(我不是指轮询和长轮询)是websocket允许双向通信,这类似于通常的原始套接字编程。 (以上是我的理解,可能是错的,随时纠正我。)
我的问题是Web客户端(浏览器)如何继续通过已打开的websocket发送另一个请求?通常的http请求会将另一个请求视为新的套接字连接,但websocket不会,这就是为什么我感到困惑,它是如何实现的?它应该在服务器端或客户端(浏览器)端处理?
答案 0 :(得分:4)
是的,websockets是双向的。一个重要的结果是您可以有效地将数据从服务器推送到客户端。
底层插座只是保持打开状态(如果无法保持打开状态,则在需要时重新打开)。请注意,HTTP 1.1尚未did that:
HTTP / 1.1是原始HTTP(HTTP / 1.0)的修订版。在HTTP / 1.0中 为每个资源建立到同一服务器的单独连接 请求。 HTTP / 1.1可以多次重用连接以进行下载 页面之后的图像,脚本,样式表等等 交付。因此,HTTP / 1.1通信的延迟更少 因为TCP连接的建立相当可观 开销。
必须在客户端和服务器端进行处理。当然这意味着要更新两个软件(old browsers,旧服务器无法处理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