node.js - 为什么客户端连接在heroku中保持自我重新连接?
问题描述
我目前正在使用 Heroku 托管一个简单的聊天程序,并尝试使用 heroku logs -t 来检查问题。我发现我的客户端将继续连接到服务器并自行断开连接。
我试图从客户端发送一条消息,而服务器端也没有收到任何东西。
服务器.js
const PORT = process.env.PORT || 3000;
const http = require('http').createServer(app);
const io = require('socket.io')(http, {
cors: {
origins: ['example.com']//my own domain
}
});
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
next();
});
app.get('/', (req, res) => {
res.send('<h1>Welcome</h1>');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('newActivity',(msg)=>{
socket.broadcast.emit('activity',msg);
})
socket.on('message',(msg)=>{
console.log(msg);
socket.broadcast.emit('message-broadcast',msg);
})
});
http.listen(PORT, () => {
console.log('listening on *:3000');
});
解决方案
该问题可能是您需要在 Heroku 应用上启用会话关联。如果您在 Heroku 上使用 WebSocket,这将确保您的 WebSocket 客户端继续保持连接到同一个后端测功机。
这一点很重要,因为 Heroku 是一个短暂的架构:请求通常被路由到一个随机的测功机,而测功机被设计为一直移动/停止/启动。
如果您想了解更多信息,请阅读我上面链接的文章以及涵盖最佳实践和其他相关信息的Heroku Node + WebSockets 文档。
推荐阅读
- javascript - Javascript模态onclick在移动设备上不起作用
- android - 无法解析外部依赖项 com.android.tools.build:gradle:3.4.2 因为没有定义存储库
- django - 如何将分页限制在 Django 中的某些页面
- java - aspectj-maven-plugin 1.11:jdk 11 缺少 tools.jar 问题
- python - How can I delay the time of creating line in canvas in python?
- docker - 在重新启动后保留 Docker 数据根
- jquery - 如何在不使用表单的情况下通过 ejs 模板向后端发送 put 请求?
- javascript - 如何访问主函数内部的事件处理函数内部的变量(不使用窗口)?
- list - 在 Dart 中返回 [...list] 有什么用?
- java - JpaRepository 保存多个实体