Har*_*sam 6 heroku websocket node.js heroku-api angular
我在 Angular 9 中构建了一个项目作为前端,Node.js 作为后端服务器。
现在我正在node appserver.js运行后端服务器。默认情况下侦听端口 9090。在另一个终端中,我ng serve像往常一样在端口 4200 上运行我的 Angular 应用程序。我在 Angular 应用程序中有一项服务,可以从服务器发送和接收消息。
我已经使用WebSocket类连接到端口 9090。我的应用程序在本地运行良好。但现在我如何在 Heroku 中部署。Heroku 给出一个随机端口号,将指定为process.env.PORT。我怎样才能在我的 WebSocket 服务中获取该端口?
我的问题是:
当两台单独的服务器都需要一个端口时,您无法部署它们。您必须将它们放入单独的应用程序中。在某些情况下,您可以组合 Web 服务器。部署服务器是正常进行的。
在 Heroku 上部署 Web 服务时,Heroku 会为您提供一个必须绑定的端口。然后您可以在 下访问您的网络服务<appname>.herokuapp.com。(<-- 这就是为什么 1.) 要求您将它们放入单独的应用程序中。)。此外,当您连接到网络服务时,您只需提供 URL。该 URL 会自动转换为<ipaddress>:<port>. 因此,在您的前端中,您不会指定端口号。您在前端指定 websocket URL,但不带任何端口。
在您的网络服务器中,您绑定到process.env.PORT.
.env 文件不应进行版本控制/提交。没有用。如果您需要环境变量,可以通过 Heroku 的仪表板进行设置。Procfile不是必需的,因为您使用的是 Node.js,它会查找npm start位于package.json. 但拥有它并没有什么坏处,因为它可以提供清晰的信息。
没有用于此目的的多构建包。
如果您的两台服务器完全不同并且使用不同的协议。一个使用 http,另一个可以将两台服务器捆绑为一台。这是一个例子:
const http = require('http');
const path = require('path');
const express = require('express');
const WSServer = require('ws').Server;
const DateFormat = require('dateformat');
let wss;
let server;
const app = express();
app.use(express.static(path.join(__dirname, './../build')));
server = new http.createServer(app);
wss = new WSServer({ server })
this.wss = wss;
wss.on('connection', function(socket) {
console.log(DateFormat(new Date(), 'm/d h:MM:ss TT'),
`client connected to server (${wss.clients.size} total)`);
socket.on('message', function(data) {
console.log(data)
});
socket.on('close', function(code, desc) {
console.log(DateFormat(new Date(),
"h:MM:ss TT"),'client disconnected, total:', wss.clients.length);
});
});
wss.on('listening', () => console.log('Websocket listening on port', config.get('port')));
wss.on('error', err => console.log('Websocket server error:', err));
server.on('error', err => console.log('Server error:', err));
server.listen(process.env.PORT);
Run Code Online (Sandbox Code Playgroud)
项目中的示例: https:
//github.com/vegeta897/d-zone/blob/63730fd7f44d2716a31fcae55990d83c84d5ffea/script/websock.js
在该项目中,带有 websocket 服务器的后端被扩展为包括一个提供静态文件的 Express 服务器。请注意,此更改仅存在于 heroku 分支中。
您将在此提交中找到使该项目 heroku 兼容的所有相关更改:
https://github.com/vegeta897/d-zone/commit/63730fd7f44d2716a31fcae55990d83c84d5ffea
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |