【问题标题】:Fetching data with javascript and sockets.io. Client side or Server side?使用 javascript 和 sockets.io 获取数据。客户端还是服务器端?
【发布时间】:2022-10-30 01:34:18
【问题描述】:

假设有一个包含多个用户的项目,该项目使用 3 个数据库表中的数据:Persons、Projects、Tasks。

有一个设置,服务器侦听发出事件,客户端每次更改数据库上的某些数据时都会发出“更新-[tableName]”事件。

当服务器接收到 'update-[x]' 事件时,它会向所有用户广播一个事件,通知他们需要重新获取什么样的数据。因此,每次发生更改时,他们都会更新数据。

我的问题是,在服务器上获取更改的数据并将其广播给用户而不是“更新”消息是否是一种更好的方法?这样一来,对数据库的请求只有一个,而不是为每个用户发出一个请求。这种方法有什么缺点吗?

我尝试了第一种方法。通知用户并让他们获取数据。 它工作正常,但我想知道我是否可以使用第二种方法减少请求数量。

【问题讨论】:

    标签: javascript reactjs sockets fetch-api


    【解决方案1】:

    你绝对可以做到!您可以将数据附加到广播中,而不仅仅是向每个客户端广播update。让我们证明:

    服务器:

    socket.on('update-users', () => {
      const users = db.users.findAll(); // Replace this line with your code for fetching all users
      socket.broadcast.emit('update-users', users);
    })
    

    客户:

    socket.on('update-users', updatedUsers => {
      setUsers(updatedUsers); // Replace this line with your code to update users in the client.
    })
    

    如果您对更新有更好的控制,您甚至可以附加已更新的确切用户的 ID 并为特定用户广播更新。如何做到这一点的示例:

    客户:

    socket.on('update-user' updatedUser => {
      setUserById(updatedUser.id, updatedUser); // Replace this line with the code to update the user in the client.
    })
    
    // This is used to emit an update for a specific user.
    socket.emit('update-user', {id: '1'});
    

    服务器:

    socket.on('update-user', ({id}) => {
      const user = db.users.findById(id); // Replace this line with your code for fetching user by id.
      socket.broadcast.emit('update-user', user);
    })
    

    【讨论】:

    • 感谢您的答复。事实上,这就是我想做的事情:发送有关更新的特定数据并广播回需要的内容。那么在服务器端进行获取并广播它们没有问题吗?那太棒了!
    • 不,一点问题都没有!这应该可以完美地工作。
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2021-10-28
    • 2012-08-17
    • 2020-07-18
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多