【问题标题】:node server hosted on heroku not serving socket.io file托管在 heroku 上的节点服务器不提供 socket.io 文件
【发布时间】:2012-06-12 22:16:51
【问题描述】:

所以我使用 node.js、socket.io 和 kineticJS 制作了一个多人太空射击游戏。 我的 Node.js 服务器实际上并不为客户端页面提供服务。我的客户端文件目前托管在我计算机上的本地 Apache 服务器中。

节点服务器现在在 Heroku 上启动并运行,我似乎无法在客户端加载 socket.io。我不断收到“io is not defined”错误。 这就是我导入脚本的方式:

    <script src="http://xxx-xxx-xxxx.herokuapp.com:5000/socket.io/socket.io.js"></script>

我已按照此处显示的说明进行操作:https://devcenter.heroku.com/articles/nodejs 我的 package.json 文件如下所示:

    {
    "name": "Grid-Frontier",
    "version": "0.0.1",
    "dependencies": {
      "socket.io": "0.9.x"
    },
    "engines": {
       "node": "0.6.x"
    }
    }

在本地主机上一切都很好,我可以执行以下操作:

    // Importing on client side
    <script src="http://localhost:8080/socket.io/socket.io.js"></script>

    // Server-side
    server.listen(8080);
    socket = io.listen(server);  

【问题讨论】:

  • 不相关,只是提醒一下:Heroku 不支持 websockets,你应该设置 xhr-polling
  • 你也关注这个了吗? devcenter.heroku.com/articles/…
  • socket.io.js 真的加载了吗?尝试手动浏览到文件位置或使用开发人员工具中的网络选项卡。听起来浏览器在加载客户端库时遇到问题。
  • @Mustafa 是的,我确实将 socket.io 更改为使用 XHR-polling。
  • 你可能想试试nodejitsu.com,它是一个更好的nodejs应用平台

标签: node.js heroku socket.io kineticjs


【解决方案1】:

因为 Heroku 只允许你在 80 端口通信,所以你不能使用其他端口,因此地址应该是:http://xxx-xxx-xxxx.herokuapp.com/socket.io/socket.io.js 不是 5000 端口。 实际上 5000 端口没有任何东西,它是内部的机器。

【讨论】:

  • 非常感谢您的回复。删除端口号完美!看来我还必须更改我的 Apache 以绑定到端口 80,以便它与 heroku 匹配。
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2020-08-09
相关资源
最近更新 更多