Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Node.js Socket.io HTTPS -传输轮询

Node.js Socket.io HTTPS -传输轮询
EN

Stack Overflow用户
提问于 2017-11-30 02:17:37
回答 1查看 1.8K关注 0票数 1

我在使用nginx和我的ssl证书,它给我的网站的https版本,这是很好的。问题是,除非我使用常规的http连接,否则我的socket.io通信无法工作。如果这段时间有点长,我很抱歉,但我不知道我在这里做什么,我想确定你们是否拥有了可能需要知道的一切。我尝试了各种不同的网站的解决方案,其中一些是在这里,但没有一个有效。

我尝试手动创建https服务器,而不是让express来完成,但这根本没有导致加载,使用当前的实现,我至少可以看到站点。

代码语言:javascript
运行
AI代码解释
复制
upstream project {
   server example.org:4000;
}

server {
   listen 80;
   return https://$host$request_uri;
}

server {
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;
   ssl_certificate /home/adam/SSL/public.crt;
   ssl_certificate_key /home/adam/SSL/example.org.key;
   ssl_prefer_server_ciphers on;

   location / {
     proxy_pass http://example.org;
   }
}

这似乎是起作用的,因为当我去我的网站,它会自动带我到https版本和页面被加载。问题是当客户端试图连接时,我一直得到:

"CLOSED

打印到控制台

以下是我的客户端和服务器代码:

代码语言:javascript
运行
AI代码解释
复制
var IPaddress = 'https://MY_SERVER_IP:4040';
var socket = io.connect(IPaddress,{secure:true});
socket.on('connect', function (socket) {
    console.log('Connected!');
});

服务器代码:

代码语言:javascript
运行
AI代码解释
复制
var express = require('express');
var app = express();
var privateKey = fs.readFileSync(__dirname+'/SSL/example.com.key','utf8');
var certificate = fs.readFileSync(__dirname+'/SSL/public.crt','utf8');
var intermediate = fs.readFileSync(__dirname+'/SSL/intermediate.crt','utf8');
var options = {key:privateKey,cert:certificate,ca:intermediate};

var io = require('socket.io').listen(4040,options);
//var io = require('socket.io').listen(4040);
io.sockets.on('connection', function (socket) {
    socket.on('disconnect',function(){
       console.log("A client has left us :(");
    });
});
app.listen(4000);

更新-2017年12月2日

在我的代码中,我有一行:

代码语言:javascript
运行
AI代码解释
复制
require('./routes.js')(app);

其中包括:

代码语言:javascript
运行
AI代码解释
复制
module.exports = function(app) {

    app.get('/main',function(req,res){
        if (req.session.user == null){
            // if user is not logged-in redirect back to login page //
            res.redirect('/');
        }   else{
            res.sendFile(path.join(__dirname + '/FrontEnd/main.html'));
        }
    });

    // viewed at http://localhost:8080
    app.get('/', function(req, res) {
        if(req.cookies.user == undefined || req.cookies.pass == undefined){
            res.sendFile(path.join(__dirname + '/FrontEnd/login.html'));
        }else {
            //attempt automatic login
            AM.autoLogin(req.cookies.user,req.cookies.pass,function(o){
               if(o !=null){
                   req.session.user = o;
                   res.sendFile(path.join(__dirname + '/FrontEnd/home.html'));
               }else{
                   res.sendFile(path.join(__dirname + '/FrontEnd/login.html'));
               }
            });

        }
    });

.

这会导致502坏网关错误吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 13:06:31

在我的评论中,在您当前的服务器代码中,express和socket.io都只接受常规的HTTP连接。socket.io listen(port[, options])函数不接受HTTPS连接。

您从手动创建HTTPS服务器开始使用正确的方法。然后,您需要将express和socket.io附加到该服务器。

代码语言:javascript
运行
AI代码解释
复制
var fs = require('fs');
var express = require('express');
var app = express();
var privateKey = fs.readFileSync(__dirname + '/SSL/example.com.key', 'utf8');
var certificate = fs.readFileSync(__dirname + '/SSL/public.crt', 'utf8');
var intermediate = fs.readFileSync(__dirname+'/SSL/intermediate.crt', 'utf8');
var options = { key: privateKey, cert: certificate, ca: intermediate };

// Create our HTTPS server here and attach express to it
var server = require('https').createServer(options, app);

// Attach socket.io to our existing HTTPS server
var io = require('socket.io')(server); 

io.sockets.on('connection', function (socket) {
    socket.on('disconnect', function() {
       console.log("A client has left us :(");
    });
});
server.listen(4000);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47570948

复制
相关文章
Pentaho BI Server 批量上传文件排坑笔记
本文讲的是实际操作中的小问题和小技巧, 这里要谈谈Pentaho BI Server对文件夹的操作,在项目使用pentaho cde图表开发完图表后,通常会迁移cde图表文件来完成开发与部署不同环境下的图表迁移,在迁移过程中发现BI Server可以对Pentaho中文件夹进行下载,
ZhangXianSheng
2019/05/28
7660
6个用于大数据分析的最好工具
大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频 和图像档案,及大型电子商务。
IT阅读排行榜
2018/08/15
1.2K0
6个用于大数据分析的最好工具
【性能分析】大数据分析工具
大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。
Luga Lee
2022/03/25
1.2K0
【性能分析】大数据分析工具
大数据处理分析的六大工具
下面请看详细介绍: Hadoop Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元
用户1410343
2018/03/27
3.1K0
大数据处理分析的六大工具
6个用于大数据分析的最好工具
大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。 在大数据和大数据分析,他们对企业的影响有一个兴趣高涨。大数据分析是研究大量的数据的过程中寻找模式,相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更明智的决策。 一 Hadoop Hadoo
小莹莹
2018/04/20
1.1K0
6个用于大数据分析的最好工具
【工具】六大工具帮你做好大数据分析
大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器、气候信息、公开的信息、如杂志、报纸、文章。大数据产生的其他例子包括购买交易记录、网络日志、病历、事监控、视频和图像档案、及大型电子商务。大数据分析是在研究大量的数据的过程中寻找模式,相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更明智的决策。 Hadoop Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是
小莹莹
2018/04/20
9960
【工具】六大工具帮你做好大数据分析
6个用于大数据分析的最好工具
大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。
IT阅读排行榜
2018/08/13
7130
6个用于大数据分析的最好工具
RocketMQ服务器及管理控制台安装 [中奖名单]
进入bin目录,建议修改runbroker.sh和runserver.sh默认JVM的大小,防止内存不足启动失败。参考设置如下
BUG弄潮儿
2020/11/19
1.6K0
RocketMQ服务器及管理控制台安装 [中奖名单]
DELL服务器iDRAC远程访问管理控制台使用
戴尔远程访问控制器(DRAC-Integrated Dell Remote Access Controller6 )控制台是管理站软件,旨在提供适用于戴尔系统的远程管理功能, 是一种系统管理硬件和软件解决方案,
全栈工程师修炼指南
2022/09/29
24.1K0
DELL服务器iDRAC远程访问管理控制台使用
dubbo管理控制台
1、在github下载dubbo源码 https://github.com/alibaba/dubbo
week
2018/08/24
2.1K0
dubbo管理控制台
pentaho中Invalid byte
上网一查,说是有中文,字体不相符,可是我没有写中文,为了能继续往后进行,修改了如下文件
py3study
2020/01/07
6180
pentaho8.1安装
本文主要介绍pentaho8.1的安装过程,重点介绍pentaho-server的安装。
Java架构师必看
2021/05/14
8960
pentaho8.1安装
大数据可视化项目开发总纲
下载地址:www.oracle.com/cn/downloads/index.html
ZhangXianSheng
2019/05/28
1.5K0
Dubbo03【管理控制台和监控中心搭建】
源码下载与编译   要搭建管理控制台和监控中心我们首先需要下载dubbo的源码并编译,首先去GitHub上下载Dubbo源码: https://github.com/apache/incubator
用户4919348
2019/04/02
1.1K0
Dubbo03【管理控制台和监控中心搭建】
7.Sentinel源码分析—Sentinel是怎么和控制台通信的?
在看我的这篇文章之前大家可以先看一下官方的这篇文章:https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0。介绍了控制台怎么使用,以及客户端要怎么设置才能被收集数据。
luozhiyun
2019/09/30
1.1K0
7.Sentinel源码分析—Sentinel是怎么和控制台通信的?
7.Sentinel源码分析—Sentinel是怎么和控制台通信的?
在看我的这篇文章之前大家可以先看一下官方的这篇文章:https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0。介绍了控制台怎么使用,以及客户端要怎么设置才能被收集数据。
luozhiyun
2019/09/28
9210
Cloudera Manager管理控制台
Cloudera Manager是一个用于管理、配置和监控CDP私有云基础集群和Cloudera Runtime服务的应用程序。
大数据杂货铺
2020/11/25
3K0
Cloudera Manager管理控制台
Jconsole-java监视和管理控制台的使用
Jconsole 监控java程序时,在启动java程序时,加上以下选项就可以进行远程监控:
yawn
2019/10/12
1.1K0
Jconsole-java监视和管理控制台的使用
Cloudera Manager管理控制台
Cloudera Manager管理控制台(Cloudera Manager Admin Console)是一个基于Web的用户界面,用于配置,管理和监控CDH。
Fayson
2018/03/30
4.8K0
「集成架构」ETL工具大比拼:Talend vs Pentaho
数据总是巨大的,任何行业都必须存储这些“数据”,因为它带有巨大的信息,从而导致他们的战略规划。正如人们需要房子感到安全一样,数据也必须得到保障。这个数据主页在技术上称为数据仓库。
架构师研究会
2019/09/08
2.3K0

相似问题

带有express的nodejs :每个视图的变量

10

Express - Nodejs - HTTPS服务器

10

将nodejs express静态请求重定向到https

480

Nodejs将服务器HTTP更改为HTTPS

12

NodeJS/Express自动检测SSL通过HTTP (HTTPS)解释?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文