【发布时间】:2018-10-12 02:03:38
【问题描述】:
我正在 Heroku 上创建一个 webapp,我需要在我的 php 应用程序的一部分中进行一些实时数据更新。
所以我想我可以在 express 服务器上使用 socket.io 来提供实时通信功能。
当它是一个 php buildpack 时,我应该如何运行 express。
这是我的 package.json 脚本部分
"scripts": {
"dev": "cross-env NODE_ENV=development webpack --config config/config.dev.js",
"build": "cross-env NODE_ENV=production webpack --config config/config.prod.js",
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
我的 procfile 是...
web: vendor/bin/heroku-php-apache2 public/
和我的构建包
$ heroku buildpacks
1. heroku/nodejs
2. heroku/php
当我在 heroku 上部署它时,我在 heroku 日志中没有收到编译错误,但我的 web 应用程序没有从 socket.io 服务器获得实时更新。 在浏览器的控制台日志中,http://myapp.herokuapp.com/socket.io/?EIO=3&transport=polling 出现 404 错误
我在这里做错了什么?
【问题讨论】:
-
鉴于您的 web dyno 运行 php 进程,您的“npm start”脚本是如何触发的?
-
@YoniRabinovitch 我刚刚开始使用 Heroku,但我想拥有一个 nodejs buildpack 不会自动运行启动脚本。我还应该在这里做什么。任何指针都会有所帮助。
-
如果你想运行 node/express web dyno,你需要在你的 procfile 中添加“web: npm start”。然而,听起来你想要一个 PHP Web 服务器,node/express 在不同的端口上监听。你不能在 Heroku 中真正做到这一点。相反,您的节点应用程序需要一个工作测功机。但是,您将无法通过 URL 从您的前端直接访问您的工作人员测功机。
-
@YoniRabinovitch 哦,好吧。这很有帮助。我已经搜索了一些关于添加工人测功机并使用它的信息。我猜我将需要使用像 redis 这样的通信中间件来解决你提到的无法从前端直接访问 worker dyno 的部分。
标签: php node.js heroku socket.io buildpack