【问题标题】:Synchronize multiple Socket.IO clients同步多个 Socket.IO 客户端
【发布时间】:2018-08-23 11:15:16
【问题描述】:

我遇到了一些 Socket.IO (ReactJS+NodeJS) 应用程序的问题。我有同步播放 YouTube 视频的应用程序(类似于 Watch2Gether),并且我有播放列表功能 - 视频结束后(例如)5 个客户端发送到 NodeJS 操作 END_OF_VIDEO 并且节点应该向所有客户端发送新的视频 ID。这就是问题所在:我应该如何同步它以仅发送 1 个响应与播放列表中的下一个视频,而不是 5 个响应导致跳过播放列表中的 5 个视频(因为来自客户端的 5 个 END_OF_VIDEO 操作)?

【问题讨论】:

    标签: node.js sockets websocket synchronized


    【解决方案1】:

    服务器:

    io.on('connection', function (socket) {
      socket.on('end of video', function (video_number) {
        if(video_number){
          // Some logic to find link_to_next_video using video_number
        }
        socket.emit('next video', link_to_next_video);
      });
    });
    

    客户:

    socket.emit('end of video', current_video_number);
    
    // Receiving 'next video' event
    socket.on('next video', function(link){
      // code to play video of received link
    });
    

    这里的 socket.emit 会发送 'next video' 事件给已经发送 'end of video' 事件给服务器的客户端。

    因此,无论有多少客户端向服务器发送相同的“视频结束”事件。服务器将通过“下一个视频”事件准确地响应所有客户端。

    您想在从客户端发送“视频结束”事件时发送一些数据,以识别客户端当前正在播放哪个视频,然后根据该视频链接决定应该发送哪些视频链接以及“下一个视频”事件客户。

    【讨论】:

    • @theNeddle 我理解你的建议,但这并不能解决我的问题。我会尝试更好地解释它。我有播放列表(NEXT 视频列表),例如:[vid1,vid2,vid3 ...] 并且当某些客户端发送 END_OF_VIDEO 事件时,服务器应该在播放列表中查找下一个视频(此处为 vid1)将其发送给客户端,然后删除它从播放列表并发送更新的播放列表 [vid2, vid3 ...]。现在,当服务器从第二个客户端收到 END_OF_VIDEO 时,它会以 vid2 响应,接下来以 vid3 等...第二个想法是我想同时将此信息发送到整个房间以实现最佳同步。
    • @JohnDoe 我无法准确理解您想要做什么。如果您可以分享一些代码,我可能会提供帮助。 this 的问题也可能对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2012-06-15
    • 1970-01-01
    • 2020-03-08
    • 2012-11-27
    • 2020-06-30
    相关资源
    最近更新 更多