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
        });
    });

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

时间: 2024-12-21 07:49:15

socket.io 1.x迁移指南的相关文章

9.nodejs权威指南--Socket.IO

1. Socket.IO 1.1 服务器 var http = require('http'); var sio = require('socket.io'); var fs = require('fs'); var server = http.createServer(function(req,rsp){ rsp.writeHead(200,{'Content-Type':'text/html'}); rsp.write('success'); }); server.listen(12345)

node.js和socket.io纯js实现的即时通讯实例分享

在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这个实例中node.js最重要的作用就是将服务端迁移到了js,实现了客户端和服务端语 言上的统一,我们只要在浏览器上同时运行两个client.html客户端页面,即可进行简单的即是通讯了,socket.io才是我们真正用来实现即时 通讯的消息的收发. var server = http.createS

反向Ajax,第3部分:Web服务器和Socket.IO

英文原文:Reverse Ajax, Part 3: Web servers and Socket.IO 前言 时至今日,用户期待的是可通过web访问快速.动态的应用.这一文章系列展示了如何使用反向Ajax(Reverse Ajax)技术来开发事件驱动的web应用.系列的第1部分介绍了反向Ajax.轮询(polling).流(streaming).Comet和长轮询(long polling).你已经了解了Comet是如何使用HTTP长轮询的,这是可靠地实现反向Ajax的最好方式,因为现有的所有

socket.io与sticky-session, 多个socket.io实例带来的问题

websocket的出现使得从服务器向浏览器推送数据更加容易.但是低版本的浏览器不支持websocket,这时socket.io出现了. 使用socket.io的应用在支持websocket的浏览器运行的时候使用websocket,而在低版本的浏览器中则使用传统的方式与服务器交互(例如long-polling及其他的方式). long-polling的应用实现方式是这样的,客户端向服务器端发起请求,服务器端不会马上返回,而是保持这个连接直到服务器需要推送信息给客户端时,才返回给客户端数据.客户端

socket.io对IE8的支持

默认下载了最新版的socket.io,版本号是1.7.2,对IE8的支持不好,反正在IE8下收发消息都不行.在网上查了很多资料,都解决不了IE8的问题,崩溃. 最后用了一个大家比较认可的版本1.0.6,可以支持IE8: 卸载socket.io npm uninstall socket.io 安装1.0.6版本的socket.io npm install [email protected] 后面的一些版本没有一一的去试,下了一个1.3.7版本的,还是可以支持收发消息的,只是发现IE8在关闭窗口时,

Socket.IO初探

建立Server //server.jsvar io = require('socket.io')(80); var chat = io .of('/chat') //设定命名空间 .on('connection', function (socket) { socket.emit('a message', { //这个只会发送给自己的socket that: 'only' , '/chat': 'will get' }); chat.emit('a message', { //全局发送 ever

【socket.io研究】0.前提准备

WebSocket出现之前,web实时推送,一般采用轮询和Comet技术(可细分为长轮询机制和流技术两种),需要大量http请求,服务器受不了.HTML5定义了WebSocket协议,基于TCP协议,由通讯协议和编程API组成,在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通讯的能力. 建立WebSocket连接的过程是浏览器首先发起一个http请求,在请求头中附带着“Upgrade: WebSocket”头信息,表名申请协议升级,服务器解析后产生应答信息,服务器与客户端的W

【socket.io研究】2.小试牛刀

1.建立个项目,也就是文件夹,这里使用testsocket 2.创建文件package.json,用于描述项目: {     "name":"testsocket",     "version":"0.0.1",     "description":"my first nodejs app",     "dependencies":{         "ex

使用Node.js的socket.io模块开发实时web程序

首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html