HTML5 Web Sockets
HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。它引入了WebSocket接口并且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作。HTML5 Web Sockets以最小的开销高效地提供了Web连接。相较于经常需要使用推送实时数据到客户端甚至通过维护两个HTTP连接来模拟全双工连接的旧的轮询或长轮询(Comet)来说,这就极大的减少了不必要的网络流量与延迟。
要使用HTML5 Web Sockets从一个Web客户端连接到一个远程端点,你要创建一个新的WebSocket实例并为之提供一个URL来表示你想要连接到的远程端点。该规范定义了ws://以及wss://模式来分别表示WebSocket和安全WebSocket连接。一个WebSocket连接是在客户端与服务器之间HTTP协议的初始握手阶段将其升级到Web Socket协议来建立的,其底层仍是TCP/IP连接。
HTML5 Web Sockets使用HTTP Upgrade机制升级到Web Socket协议。HTML5 Web Sockets有着兼容HTTP的握手机制,因此HTTP服务器可以与WebSocket服务器共享默认的HTTP与HTTPS端(80和443)。要建立一个WebSocket连接,客户端和服务器在初次握手的时候从HTTP协议提升到Web Socket协议,如例1所展示的。一旦连接建立,WebSocket数据帧就可以以全双工的模式在客户端和服务器之间来回传输。
管HTML5 Web Socket协议本身并不知晓代理服务器和防火墙,但它具有HTTP兼容的握手这一特,因此HTTP服务器可以和WebSocket服务器共享它们默认的HTTP和HTTPS端口(80和443)。一些代理服务器于Web Sockets无害并且能很好的工作,其它一些有可能妨碍Web Sockets正常工作,导致连接失败。在一些情况下可能需要一些额外的代理服务器配置,而一些特定的代理服务器可能需要被升级以支持Web Sockets。
如果一个浏览器被配置为使用显式的代理服务器(对于加密和未加密的WebSocket连接都是),那么在建立WebSocket连接时它首先会发出一个HTTPCONNECT方法到那个代理服务器。
如果使用的是一个未加密的WebSocket连接(ws://),那么在透明的代理服务器情况下,浏览器是不知道代理服务器的,所以不会发送HTTP CONNECT方法。因此,在目前的实践中连接通常会失败。
如果使用的是加密的WebSocket安全连接(wss://),那么在透明代理服务器下,浏览器不知道代理服务器,所以不会发出 HTTP CONNECT方法。然而,因为线上信息是加密的,中间透明代理服务器会简单的让加密信息通过,因此使用加密的WebSocket连接而成功建立W
ebSocket连接的几率就大大增加了。
kaazing WebSocket网关是高度优化的,代理感知的WebSocket网关,提供原生的WebSocket支持和针对上一代浏览器的Web Socket模拟功能。如果中间代理服务器被检测到,那么下行HTTP信息流就会使用一个高度优化的加密流式连接。这是通过Kaazing底层通过跨源的HTTP和HTTPS请求支持来实现的。在这一方面,不管是原生的或模拟的方式,我们可以通过WebSocket网关100%的建立WebSocket连接。
客户端javascript代码:
$(document).ready(function() {  
  
  if(!("WebSocket" in window)){  
  $('#chatLog, input, button, #examples').fadeOut("fast");  
  $('<p>Oh no, you need a browser that supports WebSockets. How about <a href="le/chrome">Google Chrome</a>?</p>').appendTo('#container'); 
  }else{  
      //The user has WebSockets 
  
      connect();  
  
      function connect(){  
          var socket;  
          var host = "ws://localhost:8000/socket/server/startDaemon.php";  
        //获取服务端socket对象
          try{  
              var socket = new WebSocket(host);  
          //实例化对象
              message('<p class="event">Socket Status: '+socket.readyState);  
  
              socket.onopen = function(){   //与服务器连接事件
                 message('<p class="event">Socket Status: '+socket.readyState+' (open)');  
              }  
  
              socket.onmessage = function(msg){    //获取服务端推送信息数据事件
                 message('<p class="message">Received: '+msg.data);  
              }  
  
              socket.onclose = function(){  //socket关闭连接事件
                message('<p class="event">Socket Status: '+socket.readyState+' (Closed)');  
              }           
  
websocket和socket          } catch(exception){  
             message('<p>Error'+exception);  
          }  
  
          function send(){  
              var text = $('#text').val();  
  
              if(text==""){  
                  message('<p class="warning">Please enter a message');  
                  return ;  
              }  
              try{  
                  socket.send(text);  //向服务端发送信息
                  message('<p class="event">Sent: '+text)  
  
              } catch(exception){  
                 message('<p class="warning">');  
              }  
              $('#text').val("");  
          }  
  
          function message(msg){  
            $('#chatLog').append(msg+'</p>');  
          }  
  
          $('#text').keypress(function(event) {  
              if (event.keyCode == '13') {  
                send();  
              }  
          });     
  
          $('#disconnect').click(function(){  
             socket.close();  
          });  
  
      }//End connect 
  
  }//End else 
  
});
服务端代码详见
另,网络资料整理。
/html5/websockets/
blog.csdn/ant_yan/article/details/4231809
www.itivy/html5/archive/2011/12/23/html5-websockets-api-usage.html
www.silverlightchina/html/HTML_5/study/2011/1213/12513.html
www.uini/2010/08/html5-websockets-based-tutorial.html
www.undisciplinedbytes/2010/06/html-5-c-web-sockets-server-and-asp-net-client-implementation/
/program/viewdetail.php?i=29842

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。