[英]Socket.io updating multiple times
我在一個小的React應用程序中包含了socket.io,並在“ componentWillMount”中設置了所有偵聽器,如下所示。
componentWillMount() {
const socket = io();
socket.on('update', function(newDataPoint) {
console.log("Client updating!");
this.setState({
count: newDataPoint.count,
temperature: newDataPoint.temperature,
humidity: newDataPoint.humidity,
pressure: newDataPoint.pressure
});
}.bind(this));
}
在服務器端,我有這個:
io.on('connection', function(socket) {
const pulse = setInterval(function() {
console.log("From server.");
io.emit('update', {
temperature: Math.floor(Math.random() * 10 + 70),
count: Math.floor(Math.random() * 300) + 5000,
humidity: Math.floor(Math.random() * 5) + 30,
pressure: Math.floor(Math.random() * 3) + 29
});
}, 1000);
socket.on('disconnect', function() {
clearInterval(pulse);
});
});
當我只有一個打開該應用程序的實例時,它工作正常,但如果有兩個實例,則每秒似乎更新兩次,然后更新三,三遍,等等。console.logs也顯示了這一點。 我認為這是由於與服務器建立了新的連接,但是我不確定如何修復它。
對於socket.io還是很新的,因此歡迎任何幫助。 非常感謝!
編輯 :我只是通過刪除連接來修復它,但是我將如何在套接字上斷開連接呢?
您正在每個傳入連接上創建一個計時器。 只需要執行一次。
var connected = 0;
const pulse = setInterval(function() {
console.log("From server.");
if(connected > 0) {
io.emit('update', {
temperature: Math.floor(Math.random() * 10 + 70),
count: Math.floor(Math.random() * 300) + 5000,
humidity: Math.floor(Math.random() * 5) + 30,
pressure: Math.floor(Math.random() * 3) + 29
}
});
}, 1000);
io.on('connection', function(socket) {
connected++;
socket.on('disconnect', function() {
connected--;
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.