node.js - 如何使用节点 js 将 socket.io 请求转换为 https?
问题描述
我有一个聊天应用程序,其中在节点 js 中实现了一个 socket.io,并且我的前端是有角度的。前面加载的是apache。现在我的套接字不能与 firefox 一起使用,所以为了解决这个问题,我需要处理来自后端而不是 apache 的 HTTPS 请求。下面是我将 HTTP 请求转换为 HTTPS 的后端代码。
var express = require('express');
var app = module.exports = express();
var https = require('https');
var fs = require('fs');
var server = https.createServer({
key: fs.readFileSync("./ssl_config/privatekey.pem"),
cert: fs.readFileSync("./ssl_config/cert.pem"),
ca: fs.readFileSync("./ssl_config/fullchain.pem"),
requestCert: true,
rejectUnauthorized: false
},app);
server.listen(5000); //listen on port 5000
var client = require('socket.io').listen(server);
client.set('origins', "https://socket.eternalsoft.in");
client.set('transports', ['websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling',
'polling']);
console.log('Socket Started on Port: '+ socketPort);
client.on('connection', socket => {
var addedUser = false;
if(socket.handshake.query.token){
console.log('connection established' , socket.handshake.query.token);
cognitoExpress.validate(JSON.parse(socket.handshake.query.token) , (err, response) => {
if(response){
console.log(response , 'response');
} else {
console.log(err , 'err');
socket.disconnect();
}
})
} else {
socket.disconnect();
}
}
前端代码:
import * as io from 'socket.io-client';
export class ChatSocketService {
public socketUrl = 'https://socket.eternalsoft.in:5000';
token;
socket;
constructor() {
}
async connectSocket(){
if (this.token) {
this.socket = io(this.socketUrl, {
forceNew: true,
secure: true,
reconnection: true,
upgrade: false,
reconnectionDelay: 3000,
reconnectionDelayMax: 5000,
reconnectionAttempts: Infinity,
timeout : 10000,
transports : ['websocket'],
query: `token=` + this.token
});
this.socket.on('connect', () => {
console.log('connection established');
});
}
}
}
上面的代码不适用于 HTTPS 请求。在我们放置 APACHE 来处理 HTTPS 请求之前,但在删除套接字的 apache 之后,我无法从前端与后端套接字建立连接。谁能帮我解决这个问题?
解决方案
推荐阅读
- flutter - Flutter 谷歌日历每次都要求 Oauth 同意
- node.js - 如何使用 node.js 解码和验证 AWS SigV4 请求的签名
- reactjs - 为什么我收到 400 bad request 错误?使用 Django Rest 框架作为后端并使用 React 作为我的 Web 应用程序的前端
- javascript - 如何计算相对百分比?
- azure-devops - 如何在 Azure DevOps 中设置 CI 以使其使用不同的环境应用程序设置?
- list - 无法输入整数类型错误 1700 AppleScript
- scala - 未调用符号函数
- c - SDL_RenderSetLogicalSize() 在拖动和调整窗口大小时不居中
- html - 返回内容锚点顶部
- java - 为什么颜色类不能在 JButton 上工作?