簡體   English   中英

Socket.io多次更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM