【问题标题】:Socket.io adding port to urlSocket.io 将端口添加到 url
【发布时间】:2016-12-23 15:48:31
【问题描述】:

我正在尝试连接到 heroku 上的 socket.io 服务器。我正在使用端口 8080 上的简单快速服务器为我的 Backbone 客户端提供服务。当我尝试这样做时:

io.connect('https://test16793.herokuapp.com/');

我明白了:

GET https://test16793.herokuapp.com:8080/socket.io/?EIO=2&transport=polling&t=1482505848382-0 net::ERR_CONNECTION_REFUSED

但是,当我打开我的 index.html 文件本身时,它可以毫无问题地连接到 heroku。似乎端口号被添加到 heroku 链接的末尾,然后它在使用 express 服务时尝试连接。

有人知道我能做些什么吗?

【问题讨论】:

    标签: sockets express heroku socket.io


    【解决方案1】:

    尝试使用var port = process.env.PORT || 8080; 代替8080 作为您的应用程序端口。

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

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

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

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

    More Info

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2018-12-09
      • 2017-12-29
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多