websocket双向概念如何工作?

时间:2012-09-11 09:28:09

标签: java sockets tomcat websocket

我使用Java Tomcat作为websocket服务器。

我认为websocket和http流媒体之间的主要区别(我不是指轮询和长轮询)是websocket允许双向通信,这类似于通常的原始套接字编程。 (以上是我的理解,可能是错的,随时纠正我。)

我的问题是Web客户端(浏览器)如何继续通过已打开的websocket发送另一个请求?通常的http请求会将另一个请求视为新的套接字连接,但websocket不会,这就是为什么我感到困惑,它是如何实现的?它应该在服务器端或客户端(浏览器)端处理?

1 个答案:

答案 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