socket.io 1.x迁移指南

转载请注明: TheViper http://www.cnblogs.com/TheViper

socket.io 1.x是从今年5月底开始发布更新的,从版本号看的出,这是次大更新。具体参见https://github.com/Automattic/socket.io/wiki/Migrating-to-1.0.我就说几点最重要的。

  • 日志输出

0.x版本的日志输出都是直接在终端或命令行输出,使用者只能控制是否输出日志。在1.x里面,使用者还可以指定输出什么,比如,DEBUG=socket.io:socket node index.js就可以只输出socket对象。可以指定输出的对象是./lib文件夹里面的index,client,namespace,socket.

另外,日志也可以输出到浏览器上,具体参见官方的迁移指南。

  •  配置

1.x版本这样设置配置了

var socket = require('socket.io')({
  // options go here
});

但是对于io.set('transports')io.set('heartbeat interval'),io.set('heartbeat timeout', io.set('resource'),还是可以用0.x里的io.set()设置。

下面的是官方迁移指南里没有的,但我在迁移过程中遇到的。

  • 传输方式

在0.x里面,传输方式有websocket, htmlfile, xhr-polling, jsonp-polling,flash.

1.x里面就只有polling和websocket!你没看错,就只有这两种。polling合并了原来的xhr-polling, jsonp-polling,并取消了不常用还有他们觉得低效不划算的htmlfile,flash.

新版本传输方式是基于socket.io团队开发的engine.io。这点从源码目录看的出来,

0.x

1.x

 engine.io是对socket.io更高一级的抽象,用作者的话说,engine.io和socket.io的关系就像是connect和express之间的关系一样。

另外,1.x版本在设置传输方式的时候,相当的蛋疼。

0.x里面这样设置就可以指定传输方式。

io.set('transports', ['xhr-polling']);
// ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']
io.sockets.on('connection', function(socket) {
    ...
});

1.x里面这样设置就不起作用,要想下面这样才可以。

io.sockets.on('connection', function(socket) {
    io.set('transports', [
        'polling'
    ]);
});
  •  向指定的socket emit

比如做一个聊天室的私人聊天,一对一。

0.x

    socket.on('private_msg', function(data, from, to) {
        var sid = users[to];
        io.sockets.socket[sid].emit('receive_msg', {
            msg : from + '说' + data
        });
    });

1.x

    socket.on('private_msg', function(data, from, to) {
        var sid = users[to];
        io.sockets.connected[sid].emit('receive_msg', {
            msg : from + '说' + data
        });
    });

暂时遇到这么多,以后遇到新的会更新此文。

 

原文地址:https://www.cnblogs.com/TheViper/p/4152190.html