gpt4 book ai didi

javascript - 我不必为我的 socket.io 应用程序指定 heroku 端口?

转载 作者:行者123 更新时间:2023-11-30 10:06:40 24 4
gpt4 key购买 nike

我已经成功制作了一个测试聊天应用程序,并且我已经获得了一个在 heroku 上运行 socket.io 的 Node js 服务器。在我的本地计算机上,我必须将客户端本地主机的端口号指定为服务器已设置的端口。但是,当我在 heroku 上运行我的服务器代码时。删除服务器

我正在使用 process.env.PORT 变量,因为 heroku 设置了它:

var port = process.env.PORT || 3000;
http.listen(port, function(){
console.log('listening on *:' + port);
});

自然地,我找到了应用程序运行的端口号,将其放在 url 中

var socket = io('https://xxxx.herokuapp.com:1111');

但是这给了我一个“net::ERR_CONNECTION_REFUSED”。

我通过删除 url 后面的端口号(在本例中为 :1111)来让它工作。我想知道为什么这会起作用,因为大多数在线教程和文章都指定了端口,以及为什么我的本地计算机也需要该端 Eloquent 能工作。

最佳答案

当您连接到您的 https://xxxx.herokuapp.com 时heroku 上的子域在端口 443(当未指定端口时用于 https 连接的端口),Heroku 可能正在使用代理或路由器将该传入连接路由到您的 node.js 服务器正在监听的特定端口到。在 Heroku 基础架构中,他们知道您的服务器在哪个实际内部主机上运行以及它在哪个实际端口号上运行,因此他们可以将您子域上的默认端口请求映射到实际端口/主机。

这样做是为了让浏览器可以直接在默认端口上连接到您的子域,而无需知道您的 Node 服务器安装的细节,这样 Heroku 就可以自动管理您的服务器并可能与其他客户共享硬件。你们每个人都在不同的端口上运行,但共享同一台机器。这些端口完全由 Heroku 管理,这是他们能够将多个客户放在同一硬件上的一种方式,而无需每个客户在浏览器 URL 中指定一个自定义端口(这对大多数客户来说是不可能的)。

因此,Heroku 正在为您的子域托管某种代理,该代理正在监听默认的 https 端口。因此,您不必在 URL 中指定端口。在内部,他们将该连接路由到您实际服务器上的实际端口。

在您的桌面上运行时,没有此类代理可以为您执行此操作,因此您必须确保客户端和服务器端口号匹配。

关于javascript - 我不必为我的 socket.io 应用程序指定 heroku 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757677/

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