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

socket.io 1.x迁移指南

1.x

socket.io 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

        });

    });

socket.io 1.x迁移指南

socket.io 1.x迁移指南

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

 

你可能感兴趣的:(socket)