javascript - 来自socket.io的数百个轮询请求,应用程序真的很慢
问题描述
我正在使用 socket.io、express 和 React 创建一个实时聊天应用程序。我的问题是我收到数百个轮询请求,直到我的浏览器基本上崩溃,我不知道为什么。
我尝试设置轮询持续时间、关闭超时、心跳间隔,我已经检查过,我的 socket.io 和 socket.io-client 都在同一个版本上。我已经尝试了所有可以在网络,但没有任何效果。我确定这只是我找不到的一个愚蠢的小错误,如果您能提供帮助,那就太好了,谢谢!
这是我的代码:
import express from "express";
import socketio from 'socket.io';
import path from 'path';
import ioCookieParser from 'socket.io-cookie-parser'
import http from 'http';
const app = express()
const port = process.env.PORT || 8000
app.set("port", port)
const httpServer = new http.Server(app);
const io = socketio(httpServer);
io.use(ioCookieParser(secret));
io.on('connection', function (client) {
const userId = client.request.signedCookies._session;
const clients = new Map();
client.on('login', () => {
clients.set(userId, { client })
console.log("clients :", clients)
})
client.on('message', (message) => {
User.findById(userId, function(err, obj) {
if(err) {
console.log(err);
return null
}
let currentUser = obj["email"];
client.broadcast.emit("received", { message, currentUser });
Connect.then(db => {
console.log("connected correctly to the server");
let chatMessage = new Chat({ message: message, sender: currentUser});
chatMessage.save();
});
})
})
client.on('error', function (err) {
console.log('received error from client:', client.id)
console.log(err)
})
});
下面是一个请求示例:
GET localhost:8000 /socket.io/?EIO=3&transport=polling&t=Mideit5&sid=OxvoE0uJbi9DZyk-AAt8 xhr
谢谢!
解决方案
我的问题是,在 React 组件中,我声明:
const socket = io.connect('http://localhost:8000')
组件内部。
我已将此常量移到组件之外,现在问题已解决!
推荐阅读
- php - 用 FOREACH 代替 FOR 打印数组的#number
- odata - PowerApps 自定义连接器在应用程序生成器中返回 404
- android - 有很多跳线(长高度)的 TextView 不适合
- c# - 如何使用 BaseAdapter 过滤 Gridview 图像并从资产加载图像?
- android - 在 AdMob 广告请求中使用多个广告网络
- c# - 使用 GroupBy 根据直到相应日期的整个数据计算平均值或计数
- asp.net - 尝试使用不明确的名称解析搜索 Active Directory,但它从不返回任何内容
- javascript - array.sort() - 方法没有正常工作
- php - Woocommerce 在购物车和结帐时打印简单的产品属性,例如可变属性
- git - Confluence 可以显示来自 Bitbucket/Jenkins 服务器的分支、提交哈希和日期吗?