socket.io

1,203 阅读2分钟

什么是socket.io

Socket.IO 是一个面向实时 web 应用的JavaScript库。它使得服务器和客户端之间实时双向的通信成为可能。他有两个部分:在浏览器中运行的客户端库,和一个面向Node.js的服务端库。两者有着几乎一样的API。像Node.js一样,它也是事件驱动的.

Socket.IO 主要使用WebSocket协议。但是如果需要的话,Socket.io可以回退到几种其它方法,例如Adobe Flash Sockets,JSONP拉取,或是传统的AJAX拉取,并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。

Socket.io并不是一个基本的、独立的、能够回退到其它实时协议的WebSocket库,它实际上是一个依赖于其它实时传输协议的自定义实时传输协议的实现。该协议的协商部分使得支持标准WebSocket的客户端不能直接连接到Socket.io服务器,并且支持Socket.io的客户端也不能与非Socket.io框架的WebSocket或Comet服务器通信。因而,Socket.io要求客户端与服务器端均须使用该框架

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直接可以建立持久性的连接,并进行双向数据传输。

因为http/1.0 没有alive状态 只有http/1.1支持websocket

现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

怎样在setInterval中添加socket

首先,创建socket

var socketIO = require('socket.io');
var http = require('http');
var app = http.createServer(handler).listen(8080);
function handler (req, res) {
    //pass
}
var io = socketIO.listen(app);
//设置一个定时器
setTimeout(function(){
    //向固定的用户发送消息  socket.id 可以使用redis与用户主键做关联
    io.sockets.connected['socket.id'].emit("event", data);
    // If you using Socket.io < 1.0, you need to use io.sockets.socket instead

}, 5000);


io.sockets.on('connection', function(socket) {
    socket.on........
    socket.emit.......
})