'React Socket io chat becoming unresponsive when spam clicking
Whenever more then one Person is connected and someone is sending messages fast their frontend becomes unresonisve and the server shows the following:
at=info method=GET path="/socket.io/?EIO=4&transport=websocket&sid=WmSvsGiIzxyWoSDvAAAB" host=biglmatthias.herokuapp.com request_id=54963564-8056-4a9d-804c-b7354c054b99 fwd="93.82.46.179" dyno=web.1 connect=0ms service=252278ms status=101 bytes=129 protocol=https
My Client Code
useEffect(() => {
socket.on('new message', function(data) {
if (navigator.vibrate) {
// vibration API supported
navigator.vibrate(1000);
}
addChatMessage(data)
});
socket.on('login', function(data) {
if (!addedUser) {
addChatMessage({
username: "SERVER",
message: "Willkommen beim chat!"
})
setloggedIn(true)
}
});
socket.on('user joined', function(data) {
addChatMessage({
username: "SERVER",
message: data + " joined the channel"
})
});
socket.on('user left', function(data) {
addChatMessage({
username: "SERVER",
message: data + " left the channel"
});
});
});
My Server:
const express = require("express");
var app = express();
var http = require('http').createServer(app);
const PORT = process.env.PORT||5000;
const path=require('path');
var io = require('socket.io')(http,{
cors:{
origin:'*',
}
});
io.eio.pingInterval=1000;
if(process.env.NODE_ENV==="production"){
app.use(express.static('build'))
app.get('*',(req, res) => {
res.sendFile(path.resolve(__dirname,'build','index.html'));
}
)
}
http.listen(PORT, () => {
console.log(`listening on *:${PORT}`);
});
io.on('connection', function (socket) { /* socket object may be used to send specific messages to the new connected client */
console.log('new client connected');
// Funktion, die darauf reagiert, wenn sich der Benutzer anmeldet
let addedUser = false;
// Funktion, die darauf reagiert, wenn sich der Benutzer anmeldet
socket.on('add user', function (username) {
// Benutzername wird in der aktuellen Socket-Verbindung gespeichert
socket.username = username;
console.log(username)
addedUser = true;
// Dem Client wird die "login"-Nachricht geschickt, damit er weiß,
// dass er erfolgreich angemeldet wurde.
socket.emit('login');
// Alle Clients informieren, dass ein neuer Benutzer da ist.
socket.broadcast.emit('user joined', socket.username);
});
socket.on('new message', function (data) {
if (!addedUser){
return;
}
console.log(socket.username+": "+data)
// Sende die Nachricht an alle Clients
socket.broadcast.emit('new message', {
username: socket.username,
message: data
});
});
socket.on('disconnect', function () {
if (addedUser) {
// Alle über den Abgang des Benutzers informieren
socket.broadcast.emit('user left', socket.username);
}
});
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
