我不必为我的 socket.io 应用程序指定 heroku 端口?
I don't have to specify a port for heroku for my socket.io app?
我已经成功制作了一个测试聊天应用程序,并且我在 heroku 上获得了带有 socket.io 运行ning 的节点 js 服务器。在我的本地计算机上,我必须将客户端本地主机的端口号指定为服务器已设置的端口。但是,当我 运行 我的服务器代码在 heroku 上时。删除服务器
我正在使用 process.env.PORT 变量,因为 heroku 设置了它:
var port = process.env.PORT || 3000;
http.listen(port, function(){
console.log('listening on *:' + port);
});
自然地,我找到了应用 运行ning 的端口号,并将其放在 url
var socket = io('https://xxxx.herokuapp.com:1111');
但是这给了我一个 "net::ERR_CONNECTION_REFUSED"。
我通过删除 url 之后的端口号(在本例中为:1111)来让它工作。我想知道为什么这会起作用,因为大多数在线教程和文章都指定了端口,以及为什么我的本地计算机也需要该端口才能工作。
当您连接到 heroku 上的 https://xxxx.herokuapp.com 子域的端口 443(这是在未指定端口时用于 https 连接的端口)时,Heroku 可能正在使用代理或路由器来路由到您的 node.js 服务器正在侦听的特定端口的传入连接。在 Heroku 基础架构中,他们知道您的服务器 运行 所在的实际内部主机以及它 运行 所在的实际端口号,因此他们可以将您子域上的默认端口请求映射到实际 port/host.
这样做是为了让浏览器可以直接在默认端口上连接到您的子域,而无需知道您的节点服务器安装的细节,这样 Heroku 就可以自动管理您的服务器并可能与其他客户共享硬件。你们每个 运行 在不同的端口上,但共享同一台机器。这些端口完全由 Heroku 管理,这是他们能够将多个客户放在同一硬件上的一种方式,而无需每个客户在浏览器中指定一个自定义端口 URL(这对大多数人来说是行不通的)客户)。
因此,Heroku 正在为您的子域托管某种代理,该代理正在侦听默认的 https 端口。因此,您不必在 URL 中指定端口。在内部,他们将该连接路由到您实际服务器上的实际端口。
当 运行 在您的桌面上时,没有此类代理可以为您执行此操作,因此您必须确保客户端和服务器端口号匹配。
我已经成功制作了一个测试聊天应用程序,并且我在 heroku 上获得了带有 socket.io 运行ning 的节点 js 服务器。在我的本地计算机上,我必须将客户端本地主机的端口号指定为服务器已设置的端口。但是,当我 运行 我的服务器代码在 heroku 上时。删除服务器
我正在使用 process.env.PORT 变量,因为 heroku 设置了它:
var port = process.env.PORT || 3000;
http.listen(port, function(){
console.log('listening on *:' + port);
});
自然地,我找到了应用 运行ning 的端口号,并将其放在 url
var socket = io('https://xxxx.herokuapp.com:1111');
但是这给了我一个 "net::ERR_CONNECTION_REFUSED"。
我通过删除 url 之后的端口号(在本例中为:1111)来让它工作。我想知道为什么这会起作用,因为大多数在线教程和文章都指定了端口,以及为什么我的本地计算机也需要该端口才能工作。
当您连接到 heroku 上的 https://xxxx.herokuapp.com 子域的端口 443(这是在未指定端口时用于 https 连接的端口)时,Heroku 可能正在使用代理或路由器来路由到您的 node.js 服务器正在侦听的特定端口的传入连接。在 Heroku 基础架构中,他们知道您的服务器 运行 所在的实际内部主机以及它 运行 所在的实际端口号,因此他们可以将您子域上的默认端口请求映射到实际 port/host.
这样做是为了让浏览器可以直接在默认端口上连接到您的子域,而无需知道您的节点服务器安装的细节,这样 Heroku 就可以自动管理您的服务器并可能与其他客户共享硬件。你们每个 运行 在不同的端口上,但共享同一台机器。这些端口完全由 Heroku 管理,这是他们能够将多个客户放在同一硬件上的一种方式,而无需每个客户在浏览器中指定一个自定义端口 URL(这对大多数人来说是行不通的)客户)。
因此,Heroku 正在为您的子域托管某种代理,该代理正在侦听默认的 https 端口。因此,您不必在 URL 中指定端口。在内部,他们将该连接路由到您实际服务器上的实际端口。
当 运行 在您的桌面上时,没有此类代理可以为您执行此操作,因此您必须确保客户端和服务器端口号匹配。