对 socket.io 使用 http 和 https

2023-12-31

我正在努力使socket.io两者都工作http and https连接,但根据我当前的配置,它似乎只能在其中之一上工作。

使用以下配置选项,它可以通过以下方式访问我的应用程序https,但是当尝试通过访问它时http它无法连接并且我收到错误:

    var app = express()
  , http= require('http').createServer(app)
  , https = require('https').createServer(options, app)
  , io = require('socket.io').listen(https, { log: false })

后来我有这个:

http.listen(80, serverAddress);
https.listen(443, serverAddress);

在客户端我有这个:

<script src='/socket.io/socket.io.js'></script>

var socket = io.connect('https://<%= serverAddress %>', {secure: true, 'sync disconnect on unload' : true});

当然如果我切换httphttps上的选项.listen and .connect服务器和客户端的功能分别我得到相反的结果,例如它可以通过访问http并且不通过https.

怎么可能做到这一点呢?我需要它主要是因为它与 Facebook 应用程序有关,所以它必须同时提供http and https根据 Facebook 规则的连接选项。

编辑:如果它有助于解决问题,我收到的错误是这样的:

Failed to load resource: the server responded with a status of 404 (Not Found) http://DOMAIN/socket.io/socket.io.js

正因为如此,我得到了其他诸如:

Uncaught ReferenceError: io is not defined 

我相信问题出在您在服务器端设置 socket.io 的方式上and在客户端上。

这是我让它发挥作用的方法(仅供您参考)。

Server:

var debug = require('debug')('httpssetuid');
var app = require('../app');
var http = require('http');
var https = require('https');
var fs = require('fs');
var exec = require('child_process').exec;
var EventEmitter = require('events').EventEmitter;
var ioServer = require('socket.io');

var startupItems = [];
startupItems.httpServerReady = false;
startupItems.httpsServerReady = false;

var ee = new EventEmitter();

ee.on('ready', function(arg) {
  startupItems[arg] = true;
  if (startupItems.httpServerReady && startupItems.httpsServerReady) {
    var id = exec('id -u ' + process.env.SUDO_UID, function(error, stdout, stderr) {
      if(error || stderr) throw new Error(error || stderr);
      var uid = parseInt(stdout);
      process.setuid(uid);
      console.log('de-escalated privileges. now running as %d', uid);
      setInterval(function cb(){
        var rnd = Math.random();
        console.log('emitting update: %d', rnd);
        io.emit('update', rnd);
      }, 5000);
    });
  };
});

app.set('http_port', process.env.PORT || 80);
app.set('https_port', process.env.HTTPS_PORT || 443);

var httpServer = http.createServer(app);

var opts = {
  pfx: fs.readFileSync('httpssetuid.pfx')
};
var httpsServer = https.createServer(opts, app);

var io = new ioServer();

httpServer.listen(app.get('http_port'), function(){
  console.log('httpServer listening on port %d', app.get('http_port'));
  ee.emit('ready', 'httpServerReady');
});

httpsServer.listen(app.get('https_port'), function(){
  console.log('httpsServer listening on port %d', app.get('https_port'));
  ee.emit('ready', 'httpsServerReady');
});

io.attach(httpServer);
io.attach(httpsServer);

io.on('connection', function(socket){
  console.log('socket connected: %s', socket.id);
});

Client:

script(src='/socket.io/socket.io.js')
script.
  var socket = io();
  socket.on('update', function(update){
    document.getElementById('update').innerHTML = update;
  });

服务器的要点如下:

  1. 需要 socket.io 但还没有调用它的监听方法(假设已经需要 http 和 https)。相反,只需保留参考即可。 (var ioServer = require('socket.io'))
  2. 创建您的 http 和 https 服务器
  3. 创建 ioServer 的新实例
  4. 绑定您的 http 和 https 服务器 (.listen)
  5. 将 http&https 服务器实例附加到 io 实例。 (.listen 是 .attach 的别名)
  6. 设置 io 事件。

和客户端(jade 语法,但你明白了):

  1. 包含socket.io脚本标签
  2. 调用 io 并捕获引用
  3. 设置您的事件处理程序

在客户端,您不需要调用 io.connect()。此外,我不确定你在那里的选择。看起来您有一个拼写错误 (, ,),并且我在 1.0 文档中找不到任何对 secure: true 的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 socket.io 使用 http 和 https 的相关文章

  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • 使用cheerio 检索href

    我有一个下载的 html 文件 看起来像这样 div div div div style height 11px color white font size 9px font weight bold div div style border
  • 如何使用 Create-React-App 节点服务器定义 MIME 类型?

    我正在尝试处理这个 WebAssembly 注释 注意 要运行instantiateStreaming and compileStreaming 您需要您的网络服务器来提供 wasm 文件application wasmMIME 类型 ht
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 如何在Windows服务器上将node.js文件作为后台进程运行?

    我正在创建一个 node js 项目并将其上传到我的 Windows 服务器 以为移动应用程序提供 API 服务 当我打开命令提示符并键入 node app js 它运行正常 但是当我关闭命令提示符时 我的 Node js 服务器停止运行
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 出站连接的 SSL 配置在 websphere-liberty 17.0.0.2 中不起作用

    我正在尝试将 websphere liberty 服务器配置为对所有出站连接 实际上是 REST 调用 使用默认密钥库和 trustore 对于入站连接使用自定义密钥和信任库 但当尝试调用外部 REST 服务时 它会失败并出现 SSLHan
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • firebase 和 firebase-admin npm 模块有什么区别?

    我想使用 Firebase 身份验证 数据库和存储 构建 Node js Web 应用程序 但我对应该使用哪个模块感到困惑 firebase or firebase 管理员 或两者 管理 SDK 运行您的代码管理权限 https fireb
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • Azure 共享计划上的 SSL?

    我有 1 个网站 1 个数据库和 1 个 SSL 托管在 azure 上 我曾经拥有 基本 托管套餐 但每个月要支付 70 美元才能获得基本设置 并且所有内容都具有最小的缩放比例 我意识到我的低流量站点不需要专用计算机 因此我尝试转向共享计
  • 在回调中使用await(Microsoft Bot Framework v4 Nodejs)

    我正在尝试将回复发送回chatbot emulator从内部回调 async getUserDetails step console log inside get userdetaiuls modeiule this userDBObjec
  • 如何使用remark将markdown解析为json

    The 备注站点 https remark js org 有一个 AST 浏览器的链接 用于输出备注 https astexplorer net gist 0a92bbf654aca4fdfb3f139254cf0bad ffe102014
  • 使用 PEM 证书的 HTTPS 连接

    我正在尝试使用 PEM 证书发布 HTTPS 请求 如下所示 import httplib CERT FILE path certif pem conn httplib HTTPSConnection 10 10 10 10 443 cer
  • 使用 DigitalOcean 在 Kubernetes 集群上为我的 Nginx-Ingress 生成通配符证书

    我遵循了这个 DigitalOcean 指南https www digitalocean com community tutorials how to set up an nginx ingress with cert manager on
  • Plesk Windows 部署 Node.js

    我创建了一个以 Node js 作为后端的 Angular 项目 这是服务器文件结构 Home directory httpdocs node hm dist browser folder server folder server js p
  • 具有 Firebase (FCM) 推送通知的 Node js

    我正在使用 Node js 开发 REST api 并且有一个休息端点来发送 firebase 推送通知 我的代码如下 const bodyParser require body parser var cors require cors v
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致

随机推荐

  • 在 Python 中使用多个代码文件和文件夹

    我是 Python 新手 还没有找到在多个代码文件和文件夹中分离代码的简单方法 我今天所做的是 为每个文件夹创建一个 init py文件 有时它是空的 我不知道为什么要这样做 但这似乎是必要的 这是与使用 C 的第一个区别 第二个区别是 对
  • facebook FB.Event.subscribe('auth.authResponseChange') 不起作用

    对于我的一生 我无法让 Event subscribe auth auth Response Change 工作 请参阅下面的代码 div div
  • 如何在C#中使用WCF REST服务?

    我的合同详细信息如下 我使用 Json 响应和请求格式 还使用 POST 方法 如何用 C 编写客户端来使用此服务 OperationContract WebInvoke UriTemplate RESTJson Sample1 Sampl
  • Firebase 身份验证 Javascript:用于重定向待处理凭据的 setCookie

    我正在尝试使用多重身份验证进行链接singinwithredirect 我抓住了错误 credential并使用JSON stringify通过 cookie 传递它 从那里 我使用以下方法将其转换回对象JSON parse 但是当我尝试将
  • 富文本 (YUI) 编辑器在 IE11 上损坏

    我正在运行 Internet Explorer 11 和 YUI 2 富文本编辑器似乎无法正常工作 有关更多详细信息 请参阅随附的屏幕截图 有什么想法如何在 IE11 下解决这个问题吗 由于IE改变了它的User Agent YUI 2 9
  • Android Studio 初始化“com.intellij.util.net.ssl.CertificateManager”时发生致命错误

    当我将Android Studio 3 0升级到3 1时出现这个问题 java lang RuntimeException com intellij ide plugins PluginManager StartupAbortedExcep
  • 使用 Python 检测 C 文件中的递归

    我需要检测相当大 5 15 000 的 C 不是 C 文件集中的直接和间接递归 文件已经过预处理 出于安全原因 该代码相当 老派 因此没有诸如函数指针之类的奇特东西 只有传递变量的函数和一些执行相同操作的函数宏 检测递归的最自然的方法是创建
  • 实体框架-“不允许新事务,因为会话中还有其他线程正在运行”

    我在尝试保存实体框架中的更改时收到以下错误 System Data SqlClient SqlException 不允许新事务 因为会话中还有其他线程正在运行 我已经看到了这个问题的各种答案 但我似乎无法让它们中的任何一个工作 基本上我在存
  • 增加 Azure Api 应用程序中的最大请求长度

    我创建了一个 Azure Api 应用程序 将用它来上传文件 这些文件将 gt 4mb 因此需要增加最大请求长度 我已将以下内容添加到 Web config
  • 取消 UNNotificationRequest

    Because UILocalNotification现已弃用 我将代码移至新版本UNNotificationRequest API 它指出 取消本地通知 在 iOS 10 0 中已弃用 使用 UserNotifications Frame
  • 缺少 git 提交

    在工作中 这种情况经常发生 有人不小心将一些东西提交到 master 而不是预期的功能分支 然后这个人尝试解决它 结果却突然消失了 我进行了仔细的搜索 但找不到任何文档来解释为什么会发生这种情况 或者如何纠正这种情况 以下是重现步骤 git
  • 尽管有有效的 SSH 密钥,仍无法将 git 存储库推送到 Heroku

    有很多堆栈文章引用了与我收到的相同的错误消息 我在另一台计算机上浏览了整个 heroku 设置文档 一切都运行良好 不知道为什么这个不起作用 但我需要它 当我跑步时 gt git push v heroku master Pushing t
  • 在 Html.ActionLink 中添加图像

    我试图创建一个选项来在 ASP net MVC 带有剃刀视图引擎 中的列表视图和小部件视图之间切换 但是 我在尝试添加图像并将其缩放到 正确的高度 与其旁边的高度相同 时遇到了一些麻烦 我一直在寻找创建类似的东西 期望的结果 List Vi
  • IIS7 中的“经典”和“集成”管道模式有什么区别?

    昨晚我正在部署一个 ASP NET MVC 应用程序 发现将 IIS7 设置为集成模式进行部署会减少工作量 我的问题是有什么区别 使用其中一种或另一种会有什么影响 经典模式 IIS6及以下版本中的唯一模式 是IIS仅直接与ISAPI扩展和I
  • R包中的源文件

    我正在构建一个非常基本的 R 包供我自己使用 有些文件需要另一个文件中的函数 因此 R 文件尝试获取 R 文件 这在构建过程中失败 两者都不 source util R nor source util R 工作 R 找不到该文件 所有文件都
  • 无法在 Android Nougat 通知的小图标中使用黄色

    我在 Android 7 x 中将通知小图标设置为黄色时遇到问题 我在用着notification setColor Color YELLOW 在构建通知对象时 它显示橄榄色而不是黄色 也尝试过使用notification setColor
  • RxJava 的后备 Observable

    我正在寻找一种更好的方法来实现使用 RxJava 时针对空结果的简单 Observable 后备系统 这个想法是 如果对一组数据的本地查询导致零项 则应该进行回退查询 可能是网络调用或其他查询 目前 我的代码包含以下内容 Observabl
  • WCF XML 结构 - 如何删除包装器节点?

    我在使用 List 对象时遇到问题 DataContract public class Recipe DataMember Name Allergies public List
  • AttributeError:类型对象“MyUser”没有属性“USERNAME_FIELD”

    我正在 django 中构建一个自定义 User 类 用于创建注册应用程序 每次尝试 makemigrations 时 我都会收到上述错误 据我所知 我的代码是根据 django 文档here https docs djangoprojec
  • 对 socket.io 使用 http 和 https

    我正在努力使socket io两者都工作http and https连接 但根据我当前的配置 它似乎只能在其中之一上工作 使用以下配置选项 它可以通过以下方式访问我的应用程序https 但是当尝试通过访问它时http它无法连接并且我收到错误