社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Aaron Waterman

Aaron Waterman 最近回复了
6 年前
回复了 Aaron Waterman 创建的主题 » 如何在Heroku中运行一个快速服务器来监听MongoDB和socket IO消息?

看来我的问题已经被问过了。

您可以在以下链接中找到答案, Socket.io + NodeJS doesn't work on Heroku

我只是简单的总结一下。

Heroku要求我们的应用程序在从前端到后端通信时在同一端口上运行API的所有功能,反之亦然。所以我第一次尝试指定两个不同的端口在本地工作,但在部署到Heroku时失败了。

然后我尝试对两个服务器实例使用相同的端口。


// implementing express
const express = require('express');
const app = express();

// uses port provided by Heroku OR port 3000
const PORT = process.env.PORT || 3000;

...

// implementing Socket IO
const server = require('http').createServer(app); // creates an instance of an http server
const io = require('socket.io')(server);

...

io.on('connection', client => {

    // server side chat features implemented here

}

server.listen(PORT); 

...

app.listen(PORT); // Express is returning a different instance of the http server

解决方案比我想象的要简单。

由于app.listen(port)返回HTTP服务器的一个实例,所以我们可以将其用于socket io。在单击之前,我必须先查看一些示例代码。全栈Web开发训练营的一位老师将我链接到这个Git Hub存储库,演示如何在将应用程序部署到Heroku时使用socket IO。

请参见以下链接, https://github.com/heroku-examples/node-socket.io/blob/master/server.js

上面示例中的实现看起来有点不同,但实际上正在执行与下面示例中演示的相同的操作,


// get Express library and create Express application
const express = require('express');
const app = express();

// get socket io library
const SocketIO = require('socket.io');

// uses port provided by Heroku OR port 3000
const PORT = process.env.PORT || 3000;

...

// This time we store the HTTP Server instance in a variable
// when we tell the Express application to listen on the specified port
const server = app.listen(PORT); 

// and use that instance to implement our socket io connection
const io = SocketIO.listen(server);

io.on('connection', client => {

    // server side chat features implemented here

}

希望这个解释能帮助别人理解和避免我面临的问题。

并且一定要查看发布的链接,因为我发现它们对于理解我所面临的问题以及如何解决它很有用。