WebSocket

来源:互联网 发布:蝙蝠侠 超人 知乎 编辑:程序博客网 时间:2024/05/20 07:49

websocket

  1. 简介
    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端
  2. 原理
    在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
    在此WebSocket 协议中,为我们实现即时服务带来了两大好处:
    1. Header
      互相沟通的Header是很小的-大概只有 2 Bytes
    2. Server Push
      服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。
  3. 浏览器端实现
// 创建一个Socket实例var socket = new WebSocket('ws://localhost:8080'); // 打开Socket socket.onopen = function(event) {   // 发送一个初始化消息  socket.send('I am the client and I\'m listening!');   // 监听消息  socket.onmessage = function(event) {     console.log('Client received a message',event);   };   // 监听Socket的关闭  socket.onclose = function(event) {     console.log('Client notified socket has closed',event);   };   // 关闭Socket....   //socket.close() };

socket.io

  1. 简介
    Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用。

  2. 使用

    1.客户端<script src="/socket.io/socket.io.js"></script>  <script>var socket=new io.connect('ws://localhost:8001');socket.on('transfer',function(data){    console.log(data);});socket.emit('a',{a:'hello',b:'world'});</script>2.服务器端var app=express();var http=require('http').Server(app);var io=require('socket.io')(http);var data=[2.3,5,6,7];io.listen(8001);io.on('connection',function(socket){    socket.emit('transfer',data);});