gpt4 book ai didi

node.js - https 上的 Socketio 使用 redis

转载 作者:可可西里 更新时间:2023-11-01 11:24:16 25 4
gpt4 key购买 nike

我在 bitnami lamp stack 上有一个网络应用程序,操作系统是 ubuntu,它使用 Apache 作为网络服务器。SSL 证书是使用 Let's Encrypt 生成的。我可以通过 http 和 https 访问该站点。

Furthermore I am using following stacks:
- nodejs
- socket.io
- redis

在我的本地机器上发送通知工作正常,websocket 工作。

但是在我运行在 https 上的生产服务器上它不起作用。我不断收到以下错误消息:

socket.io.js:2 GET https://mypage.com:3000/socket.io/?EIO=3&transport=polling&t=MNxGNEt net::ERR_CONNECTION_TIMED_OUT

这就是我的 socket.js(服务器)的样子:

var app   = require('http').createServer(handler);
var fs = require('fs');
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();

// class declaration
var Redis = require('ioredis');

function handler(req, res) {
res.writeHead(200);
res.end('');
}

io.on('connection', function(socket) {});

var redisUserSignedUp = new Redis();

redisUserSignedUp.subscribe('signed-up-channel');

redisUserSignedUp.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});

// run server on port 3000
app.listen(3000, function () {
console.log('Server runs!');
});

在我的作品中,我目前正在这样尝试:

var app = require('https').createServer({
key: fs.readFileSync('/opt/bitnami/apache2/conf/serverKey.pem'),
cert: fs.readFileSync('/opt/bitnami/apache2/conf/serverCrt.pem')
}, handler);
var fs = require('fs');
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();

// class declaration
var Redis = require('ioredis');

function handler(req, res) {
res.writeHead(200);
res.end('');
}

io.on('connection', function(socket) {});

var redisUserSignedUp = new Redis();

redisUserSignedUp.subscribe('signed-up-channel');

redisUserSignedUp.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});

// run server on port 3000
app.listen(3000, function () {
console.log('Server runs!');
});

我正在尝试像这样访问它:

var options = {
key: fs.readFileSync('/opt/bitnami/apache2/conf/serverKey.pem'),
cert: fs.readFileSync('/opt/bitnami/apache2/conf/serverCrt.pem'),
requestCert: true
}

var app = require('https').createServer(options, handler);

本地:

const socket = io('http://myapp.test:3000'); // localhost dev Folder is mapped to this .test url
socket.on('signed-in-channel:App\\Events\\UserSignedIn', (data) => {

制作:

var socket = io('mypage.com:3000', {secure: true});

最佳答案

您只创建一个 http 服务器,但要使用 ssl 连接,您需要一个 https 服务器。

var options = {
key: fs.readFileSync('./file.pem'),
cert: fs.readFileSync('./file.crt')
};

var app = require('https').createServer(handler);

关于node.js - https 上的 Socketio 使用 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52440303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com