用这个撕掉我的头发......有没有人设法将Socket.IO扩展到由Node.js的集群模块产生的多个"工人"进程?
假设我有四个工作进程(伪):
// on the server
var express = require('express');
var server = express();
var socket = require('socket.io');
var io = socket.listen(server);
// socket.io
io.set('store', new socket.RedisStore);
// set-up connections...
io.sockets.on('connection', function(socket) {
socket.on('join', function(rooms) {
rooms.forEach(function(room) {
socket.join(room);
});
});
socket.on('leave', function(rooms) {
rooms.forEach(function(room) {
socket.leave(room);
});
});
});
// Emit a message every second
function send() {
io.sockets.in('room').emit('data', 'howdy');
}
setInterval(send, 1000);
Run Code Online (Sandbox Code Playgroud)
在浏览器上......
// on the client
socket = io.connect(); …Run Code Online (Sandbox Code Playgroud) 如何找到具有匹配模式的所有键的计数.
例如,有两个键abc:random-text-1和abc:random-text-2.这里的共同模式是abc:.所以,这里的计数是2.
我怎样才能在redis中做到这一点?
我正在开发一个必须缓存和监控聊天的应用程序,目前它是一个本地应用程序,我已经安装了 redis 和 redis-cli。我面临的问题是(node:5368) UnhandledPromiseRejectionWarning: Error: The client is closed
在下面附加代码片段
//redis setup
const redis = require('redis');
const client = redis.createClient()//kept blank so that default options are available
//runs when client connects
io.on("connect", function (socket) {
//this is client side socket
//console.log("a new user connected...");
socket.on("join", function ({ name, room }, callback) {
//console.log(name, room);
const { msg, user } = addUser({ id: socket.id, name, room });
// console.log(user);
if (msg) return callback(msg); //accessible in frontend
//emit to all …Run Code Online (Sandbox Code Playgroud) 有没有办法按键删除/删除条目,使用Node_redis?我从文档中看不出任何这样的选项..
我希望能够删除所有密钥.有没有办法刷新节点redis中的所有?
Redis客户:
client = redis.createClient(REDIS_PORT, REDIS_HOST);
Run Code Online (Sandbox Code Playgroud) 我试图在redis中保存二进制对象,然后将其作为图像提供.
这是我用来保存数据的代码:
var buff=new Buffer(data.data,'base64');
client.set(key,new Buffer(data.data,'base64'));
Run Code Online (Sandbox Code Playgroud)
以下是转储数据的代码:
client.get(key,function(err,reply){
var data = reply;
response.writeHead(200, {"Content-Type": "image/png"});
response.end(data,'binary');
});
Run Code Online (Sandbox Code Playgroud)
数据的前几个字节似乎已损坏.神奇的数字不正确.
做了一些试验:
当我做以下事情时:
var buff=new Buffer(data.data,'base64');
console.log(buff.toString('binary'));
Run Code Online (Sandbox Code Playgroud)
我明白了:
0000000:c289 504e 470d 0a1a 0a00 0000 0d49 4844
当我这样做
var buff=new Buffer(data.data,'base64');
console.log(buff);
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
缓冲液89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00
我不确定c2来自哪里
我试图使用 typescript 将 Redis (v4.0.1) 连接到我的 Express 服务器,但遇到了一些问题。正在学习打字稿。它在redis.createClient()内的主机上显示红线有人可以帮助我吗?
const host = process.env.REDIS_HOST;
const port = process.env.REDIS_PORT;
const redisClient = redis.createClient({
host,
port,
});
Run Code Online (Sandbox Code Playgroud)
Argument of type '{ host: string | undefined; port: string | undefined; }' is not assignable to parameter of type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.
Object literal may only specify known properties, and 'host' does not exist in type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.ts(2345)
Run Code Online (Sandbox Code Playgroud) 我有一个使用Express和node_redis的Node应用程序.我正在遵循学习节点手册中概述的方法,并在应用程序的生命周期中创建单个客户端.鉴于这种方法,我什么时候打电话close()给redis客户端?我还需要吗?
相关代码
var express = require( 'express' ),
redis = require( 'redis' );
var app = express(),
config = require( './config/application' )[ app.get( 'env' ) ];
// create Redis client
var redisClient = redis.createClient();
redisClient.on( 'error', function( err ) {
console.log( 'Error' + err );
} );
// select the database
redisClient.select( config.redis_database );
...
/* more setup, route defintions, etc. */
...
http.createServer( app ).listen( 4000, function() {
console.log( 'Server started …Run Code Online (Sandbox Code Playgroud) 我正在使用laravel和redis进行实时聊天.我可以从我的laravel中触发事件并将该数据接收到客户端.
我的问题是如何从客户端发送内容然后将其接收到redis并将其传递给laravel
例如,我如何检查用户是否已阅读聊天消息.
代码:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require( 'socket.io' ).listen( server );
var redis = require('redis');
var port = process.env.PORT || 8888;
server.listen(port,'x.x.x.x');
io.on('connection', function (socket) {
console.log("Connected");
});
var redisClient = redis.createClient();
redisClient.psubscribe(['get_message','read_message']);
redisClient.on("pmessage", function(channel, pattern, message) {
console.log(channel); // i can see get_message on this line in console but not read_message
});
//Also tried this
io.on('read_message', function (socket) {
console.log(socket);
});
//Also this
redisClient.on('read_message', function (socket) …Run Code Online (Sandbox Code Playgroud) 首先,让我告诉您如何在 NodeJS 应用程序中使用 Redis 连接:
class RDB {
static async getClient() {
if (this.client) {
return this.client
}
let startTime = Date.now();
this.client = createClient({
url: config.redis.uri
});
await this.client.connect();
return this.client;
}
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因 - 我不知道 - 我的应用程序有时会崩溃,无缘无故地出现错误 - 这种情况大约每周发生一两次:
Error: Socket closed unexpectedly
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:
node-redis ×10
node.js ×9
redis ×9
express ×2
sockets ×2
javascript ×1
laravel ×1
php ×1
socket.io ×1
typescript ×1