在Node.js程序中,可以借助 Socket.IO来构建实时应用。 然而有时候后台与Socket.IO是异构的,比如Java、Python的Web后台。 这时可以利用 Redis的订阅/发布机制作为中转,连接异构的后台和Socket.IO服务。 本文介绍如何在Socket.IO中订阅Redis Channel。
至于如何在Java/Python/C#中发布消息到Redis Channel,请参照对应语言的Redis SDK。
安装软件
- Redis。可以参照官网 http://redis.io/ 来安装,在 这里可以下载。
- Node.js。也可以在官网 https://nodejs.org/ 直接下载。
然后创建一个文件夹作为Socket.IO服务器项目,在其中安装 Socket.IO
和Node.js的 redis
客户端。
npm install Socket.IO redis --save
简单的Socket.IO服务
创建 app.js
文件,写一个基于Node.js HTTP模块的Socket.IO服务器。 我们创建两个命名空间,一个 notification
,一个 chatting
。
var server = require('http').createServer();
var io = require('Socket.IO')(server);
io
.of('/notification')
.on('connection', socket => {
console.log('user connected to notification');
socket.on('disconnect', () => console.log('user disconnected'));
});
io
.of('/chatting')
.on('connection', socket => console.log('user connected to message'));
server.listen(3001, () => console.log('Socket.IO listen to port 3001'));
不同的浏览器端可以连接到不同的命名空间,例如连接到 notificaiton
:
var socket = io('/notification');
socket.on('message', function (msg) {
console.log(msg);
});
需要在HTML中引入
<script src="/path/to/Socket.IO.js"></script>
,见 http://Socket.IO/download/。更多Socket.IO的例子,请参考: http://Socket.IO/docs/#how-to-use
订阅Redis Channel
在上述服务器文件中引入 redis
并创建一个客户端,可以收到所有频道的信息。 可以通过switch-case
来分发各频道的消息。
var redis = require('redis');
var redisClient = redis.createClient();
var NOTIFICATION_CHANNEL = 'notification_channel', CHATTING_CHANNEL = 'chatting_channel';
redisClient.on('message', function(channel, message) {
switch (channle){
case NOTIFICATION_CHANNEL:
console.log('notification received:', message);
io.of('/notification').emit('message', message);
break;
case CHATTING_CHANNEL:
console.log('chatting received:', message);
io.of('/chatting').emit('message', message);
break;
}
});
redisClient.subscribe(NOTIFICATION_CHANNEL);
redisClient.subscribe(CHATTING_CHANNEL);
在 redis.createClient()
的参数中可以设置Redis服务器的主机名、端口、密码等信息, 参见对应的 文档。
测试执行
启动Socket.IO服务器:
$ node app.js
Socket.IO listen to port 3001
在命令行(Bash、Zsh…)中打开 redis-cli
,并发布一条消息:
$ redis-cli
127.0.0.1:6379> publish notification "fuck you!"
然后Socket.IO便会输出 notification received: fuck you!
,同时所有连接到 /message
命名空间的浏览器端也会收到消息并输出到控制台。
相关推荐
Socket.IO Redis发射器 @socket.io/redis-emitter软件包使您可以轻松地与另一个Node.js进程(服务器端)中的一组Socket.IO服务器进行通信。 发射器还提供其他编程语言版本: Java: : Python: : ...
:construction: Kotlin插座-Redis适配器该库使您可以从kotlin后端通过socket.io轻松发布通知。 目前正在建设中,尚未准备好生产。 它必须与socket.io-redis结合使用。 当前版本仅使用socket.io-redis@6和socket.io@4...
Socket.io-Redis-Chat-App 这是基本 Node.js - socket.io 聊天应用程序的修订工作。 这一次,我使用Redis来捕获之前的所有消息。 Redis 是一种数据结构服务器,它是开源的、联网的、内存中的,并存储具有可选持久性...
节点socket.io-redis
socket.io-redis-with-shared 具有共享内存的 Socket.io Redis 适配器它与普通的socket.io-redis适配器相同。 但是有1个功能。 它允许在实例之间创建共享对象。 要共享您可以使用的任何数据: socket.adapter.shared...
此应用程序演示了如何将 Redis 和 PubSub 与 Node.js 和 Socket.io 结合使用,以跨实例连接应用程序,让这些实例运行在同一台计算机或不同的服务器上。 入门 确保你已经安装了 Redis 和 Node.js npm install在项目...
主要实现egg利用egg-socket.io 和前端建立长链接 。里面2个文件egg、和html,一个是egg的 你更新下依赖,可以直接启动,还一个是html可以直接测试后端的推送。 演示地址看这里...
laravel-realtime-chat, 实时聊天w/Laravel + Redis + node.js + socket.io Laravel 实时聊天 用 Laravel 4.2 + node.js + + Socket.io. 编写的实时聊天示例Live: http://chat.guilhermeslk.com.br: )##Requirem
#socket.io-redis 性能测试 ##用法 npm start 它使用 pm2 启动以下服务: 3台服务器: server1:侦听端口 3000,使用命名空间 /test server2:侦听端口 3001,使用命名空间 /test server3:侦听端口 3002,...
我们做了一些更改,使socket.io-redis 0.2.0和socket.io 0.1.4兼容。如何使用通过点子安装pip安装socket.io-emitter from socket_io_emitter import Emitterio = Emitter ({ 'host' : 'localhost' , 'port' : 6379 ...
该适配器旨在替代,该允许多个socket.io实例使用而不是Redis进行通信。 为什么选择卡夫卡? Kafka是一种非常快速,可扩展的分布式消息总线,旨在处理低延迟的大量数据。 它最初由LinkedIn开发,现在是Apache ...
Socket.IO的粘性会话一种在使用简单方法。 与等其他软件包不同,路由基于会话ID( sid查询...const redisAdapter = require ( "socket.io-redis" ) ;const numCPUs = require ( "os" ) . cpus ( ) . length ;const { s
聊天 通过 node.js、socket.io、redis 聊天
与Laravel5.6和Socket.io实时聊天这是使用Laravel5.6,Socket.io和Redis制作的实时聊天应用程序安装存储库的过程1.克隆仓库:git clone 实时2.进入目标文件夹:cd / Realtime 3,安装作曲家:$ composer install 4....
内含redis-3.2.12.tar.gz 和redis-3.3.3.gem 2个文件 适合redis的安装学习。redis-3.2.12版本安全性比其他低版本较高,不会被扫描出安全问题
Cackle,一个聊天应用程序Cackle是使用ES2015 / ES6编写的使用Node.js,Express.js,Socket.io和Redis的聊天应用程序。部署方式确保已安装 & 核心软件包克隆仓库或下载src 转到主目录cd cackle-chat npm install...
这些是使用socket.io和redis获得基本回显示例所需的一般步骤! 确保在OSX上安装了Redis,可以进行brew install redis && brew services start redis 然后创建一个新的Echo项目,例如composer create-project ...
Node.js + Socket.io + Redis 实时应用使用 Node.js、Socket.io 和 Redis 的实时应用程序。安装1 - 安装 npm 模块: npm install2 - 启动redis: redis-server3 - 启动redis监控: redis-cli monitor4 - 启动节点...
Socket.IO群集:可扩展的Socket.IO Socket.IO群集提供了一次拥有多个Socket.IO服务器并使用消息队列与它们进行交互的功能。要求Node.JS(在v0.4.7上测试) 雷迪斯这个怎么运作Socket.IO群集包括三个部分: frontend-...
redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...