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

本文根据socket.io与redis来实现基本的聊天室应用场景,主要表现于多个浏览器之间的信息同步和实时更新.

首先看下基本的应用场景:多个浏览器同时跟webServer连接,可实时获取webServer推送的数据,如显示某一项实时更新的数据,多个client之间同步消息等.

这里,需要使用到socket.io和redis的publish机制.

1, socket.io连接于浏览器和nodejs的http服务器之间,可用于二者之间同步数据.

2, redis是一种key-value的数据库,可采用发布/订阅(subscribe/publish)机制,可以订阅一个频道以接收主服务器发布的所有消息记录.

大概的流程图如下,主要分为三部分,

1, chat.js,

建立一个node.js的http server,与浏览器建立socket.io连接,可以通过该socket.io连接将数据发送给各个浏览器,

同时,创建一个redis的客户端,订阅redis-server的一个频道(如chat频道),

主要代码如下:

// chat.js

var http = require("http");

var server = http.createServer().listen(4000);

var io = require("socket.io")(server);

var redis = require("../socket.io/node_modules/redis");

var sub = redis.createClient();

sub.subscribe("chat"); // 订阅chat频道

io.on("connection", function(socket){

sub.on("message", function(channle, msg){ // chat频道一旦接收到消息msg,则立即向socket.io连接中发送该msg数据.

console.log("redis on message", msg);

socket.emit("msgReceived", msg);

})

})

注意,该chat.js的http server要一直运行,同时与浏览器和redis-server建立连接或监听.

2, 向redis-server的chat频道发布消息,

可以采用redis-cli的方式:

redis-cli -h localhost -p 6379

向chat频道发送简单的消息1234567890

publish chat 1234567890

也采用python的的redis模块:

import redis

r = redis.StrictRedis(host="localhost", port=6379, db=0)

r.publish("chat", "1234567890")

并且,redis-server也要一直运行.

那么,通过redis的chat频道发布消息,则订阅该频道的chat.js就能收到并做相应处理.

3, 最后,浏览器端如何接收socket.io中传递的数据呢?也很简单.

在js代码中,

<script src="http://localhost:4000/socket.io/socket.io.js"></script>

var socket = io("http://localhost:4000")

socket.io("connection", function(){

console.log("connection setup for socket.io !")

})

socket.on("msgReceived", function(data){ // 这里的msgReceived要与chat.js中的emit方法的参数对应起来

// 对于data数据的处理过程

})

那么至此,就可以在后端通过redis-cli或者python语句,向redis-server的chat频道发布消息,而chat.js订阅的该chat频道.

然后,chat.js再将消息通过socket.io同步给所有与其建立socket.io连接的浏览器客户端.

大概地记录了一下,如有不准确的地方,欢迎批评指正.

时间: 2024-10-14 04:38:45

使用socket.io+redis来实现基本的聊天室应用场景的相关文章

使用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

C# Redis辅助类封装与简单聊天室的实现思路说明

虽然redis api的功能比较齐全,但个人觉得为了更好的方便学习和使用,还是很有必有做一个类似DBHelper的帮助类 辅助类主要功能(代码会在最后放出来) 1. 事件监听: 重新配置广播时(主从同步更改) 发生内部错误时(调试用) 更改集群时 配置更改时 发生错误时 物理连接失败时 建立物理连接时 说明:此处只是进行一个简单的监听,请根据实际需要进行修改 2.存储功能: a. [临时存储]直接 key - value string 类型存储 使用StringXxx方法进行调用 此类方法用于存

vue + socket.io实现一个简易聊天室

vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度.因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那么容易了.功能虽然不多,但还是有收获.设计和实现思路较为拙劣,恳请各位大大指正. 可以达到的需求 能查看在线用户列表 能发送和接受消息 使用到的框架和库 socket.io做为实时通讯基础 vuex/vue:客户端Ui层使用 Element-ui:客户端Ui组件 类文件关系图 服务端: 客户端: 服

Socket.IO聊天室

小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ Socket.IO聊天室 简介:Socket.IO实现了实时双向的基于事件的通讯机制.旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制.下面我们使用Node.js和Socket.IO来做一个简单的聊天室.一.初始化项目 (这个是在实验楼网站的虚拟平台需要实现的~可自动略过这一环节,

Socket.io 延伸

项目正好用到了即时通讯功能,于是研究到了webSocket技术,后来发现了可以在web.[Android].[iOS]上同时使用的解决方案,那就是SocketIO.其实现原理啥的不做介绍了,直接贴上IOS项目可能会用到的一些资源. 首先是官网:http://socket.io/这个大家都不会陌生吧~~ 1.官方推荐的Android项目:http://socket.io/blog/native-socket-io-and-android/ github上的相应地址为:https://github.

socket.io+angular.js+express.js做个聊天应用(四)

接着上一篇 使用angularjs构建聊天室的client <!doctype html> <html ng-app="justChatting"> <head> <meta charset="UTF-8"> <title>justChatting</title> <link rel="stylesheet" href="/bower_components/b

socket.io 学习笔记

概要: 前端页面应用socketio库 后端使用node 搭建 前端如何使用socket.io <!--引入socket.io库 --> <script type="text/javascript" src="./socket.io/socket.io.js"></script> <script type="text/javascript">     //连接服务器     var socket =

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通道选择 广而告之 使用socket.io作为跨浏览器平台的实时推送首选,经测试在各个主流浏览器上测试都确实具有良好的下实时表现.这里为推广socketio-netty服务器端实现哈,做次广告,同时预热一下: socketio-netty : 又一款socket.io服务器端实现,兼容0.9-1.0版本~ 示范目的 我们要构建一个在市面上常见浏览器上都可以正常运行的集体聊天应用,保证在IE6+,Fi

Android开发笔记(一百一十一)聊天室中的Socket通信

Socket通信 基本概念 对于程序开发来说,网络通信的基础就是Socket,但因为是基础,所以用起来不容易,今天我们就来谈谈Socket通信.计算机网络有个大名鼎鼎的TCP/IP协议,普通用户在电脑上设置本地连接的ip时,便经常看到下图的弹窗,注意红框部分已经很好地描述了TCP/IP协议的作用. TCP/IP是个协议组,它分为三个层次:网络层.传输层和应用层: 网络层包括:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 传输层包括:TCP协议.UDP协议. 应用层包括:HT