[转载]使用node.js+socket.io搭建实时消息系统

在开发web应用时,经常会有消息接收需求。例如后台处理完某个任务,需要告知用户等。一个简单的做法,是使用ajax轮询。这样带来的问题一是低效,二是消息触达不够实时。另一个方法是使用websocket来接收消息,但可惜IE不支持这种方式。下面推荐一种既能实时接收消息,又能兼容各种浏览器的方案,那就是node.js+socket.io。

node.js的异步非阻塞模型,做消息推送非常合适。socket.io则负责屏蔽浏览器的差异,其会选择性的使用下列方式建立连接:websocket, flash socket, ajax long polling, jsonp polling...总之,开发者不必再考虑浏览器的兼容问题了。

代码编写方面,也比较简单,基本上只要对相应的事件,编写代码即可。

web页面:

<script src="http://10.1.164.103:8080/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect(‘10.1.164.103:8080‘);

socket.emit(‘join‘, {
       //发送用户名

username: ‘test‘,
    });

//监听消息

socket.on(‘message‘, function (data) {
    //收到消息后作业务处理

...
    });

</script>

服务器端,这里实现接收php发来的http请求,然后将消息推给浏览器的功能。注意一个用户可能打开多个窗口,因此这里需要把同一个用户建立的链接,放入同一个房间,当需要推送消息时,把消息在房间内广播即可。

var host = 10.1.164.103;
var port = 8080;

var http = require(‘http‘);
var express = require(‘express‘);
var app = express();

var server = http.createServer(app);

//监听端口

server.listen(port, host);
console.log(‘Server running at http://‘ + host + ‘:‘ + port + ‘/‘);

app.get(‘/‘, function(req, res){
    if(req.query.name != undefined && req.query.msg != undefined){

//这里将消息在房间内进行广播(对应一个用户打开多个窗口的情况)

io.sockets.in(req.query.name).emit(‘message‘, {code: 0, data : req.query.msg});

}

res.end();
});

var io = require(‘socket.io‘).listen(server);

var connectionList = {};

//监听所有到服务器上的连接.
io.sockets.on(‘connection‘, function (socket) {
    connectionList[socket.id] = {socket: socket};
    socket.on(‘join‘, function(data){
        if(data.username != undefined){

//加入以用户名命名的房间(对应一个用户打开多个窗口的情况)

socket.join(data.username);
            connectionList[socket.id].username = data.username;

}

});

//监听断开连接
    socket.on(‘disconnect‘,function(){
        if(connectionList[socket.id].username != undefined){

//离开房间
            socket.leave(connectionList[socket.id].username);
        }
        delete connectionList[socket.id];
    });
});

//监听中断信号,实现一些特殊功能

process.on(‘SIGHUP‘, function(){
    ....
});

至此,我们就实现了一个简单的消息推送demo。实际业务上使用时,可以加上登陆认证,日志模块等功能,完善消息推送服务。

时间: 2024-10-08 10:44:38

[转载]使用node.js+socket.io搭建实时消息系统的相关文章

使用Node.js+Socket.IO搭建WebSocket实时应用

Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. 作者:潘良虎链接:https://www.zhihu.com/question/20215561/answer/26419995来源:知乎原文地址:http://www.plhwin.com/2014/05/28/nodejs-socketio/ WebSocket简介 谈到Web实时推送,就不得不说

使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方

(转)使用Node.js+Socket.IO搭建WebSocket实时应用

Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案

node.js + socket.io 聊天群聊系统

主要功能:普通用户可以在群里聊天管理员登录后可以在群里聊天, 也可以踢人 详细功能: 收到消息有声音提醒(管理员发的消息有不同的声音提醒)进入聊天时会显示最近的聊天记录保存每一天的聊天记录到"日期.txt"文本中可以更换聊天背景实时显示在线人数实时显示聊天人员变动情况实时显示谁在输入消息管理员输入的字体颜色不同敏感字替换 源码地址: https://github.com/1061186575/chat 原文地址:https://www.cnblogs.com/zp106/p/12305

用node.js(socket.io)实现数据实时推送

在做商品拍卖的时候,要求在商品的拍卖页面需要实时的更新当前商品的最高价格.实现的方式有很多,比如: 1.setInterval每隔n秒去异步拉取数据(缺点:更新不够实时) 2. AJAX轮询方式方式推送数据(缺点:服务端需要在死循环中反复查询数据库) 3.websocket推送数据(缺点:仅支持html5标准的浏览器) socket.io的简要介绍 所有客户端都通过socket.io挂在nodejs服务器上(注意: 只是挂着,不需要任何循环,因为它是事件驱动的):需要推送消息了,服务器就与nod

基于node.js+socket.io+html5实现的斗地主游戏(1)概述

一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为什么题目直接叫斗地主游戏的原因了. 2.手牌有黑桃A和草花A的两个人一伙:若黑桃A和草花A都在一个人手里,那就自己一伙. 3.开牌之后可以选择亮A或者不亮A,亮A之后队友也应亮明身份,互相配合出牌. 4.随机指定最先出牌者. 5.按照手牌出完顺序记分数,分别记4.3.2.1分,最后整队加和,分数高的队伍获胜.

Node.js+socket.io在线聊天室

Node.js+socket.io实现在线聊天室,照着这个教程做的,稍加改动即可实现. Node.js:0.10.31 Express:3.* 创建工程chat: 添加几个文件,工程结构如下 代码: package.json: { "name": "application-name", "version": "0.0.1", "private": true, "scripts": { &

使用node.js + socket.io + redis实现基本的聊天室场景

在这篇文章Redis数据库及其基本操作中介绍了Redis及redis-cli的基本操作. 其中的publish-subscribe机制应用比较广泛, 那么接下来使用nodejs来实现该机制. 本文是对之前的一篇文章使用socket.io+redis来实现基本的聊天室应用场景的详细补充. 关于redis的详细情况, 请参考Redis数据库及其基本操作. 对于redis的前提是redis-server一直在运行, 这里就使用默认的localhost:6379. node.js连接redis-serv

基于Node.js + socket.io实现WebSocket的聊天DEMO

原文摘自我的前端博客,欢迎大家来访问 http://hacke2.github.io 简介 最近看Node.js和HTML5,练手了一个简易版的聊天DEMO,娱乐一下 为什么需要socket.io? node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一, 为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验, 于是socket.io诞生. 简答来说socket.io具体以下特点: 1.socket.io设计的目标是支持任何的浏览器