【问题标题】:socket.io-stream emit vs onsocket.io-stream 发射 vs on
【发布时间】:2018-09-25 17:31:44
【问题描述】:

socket.io-stream 文档包含以下发送和接收流数据的示例:

// send data
ss(socket).on('file', function(stream) {
  fs.createReadStream('/path/to/file').pipe(stream);
});

// receive data
ss(socket).emit('file', stream);
stream.pipe(fs.createWriteStream('file.txt'));

根据这个例子,看来我们应该用“on”来发送数据,用“emit”来接收数据。但这似乎与我迄今为止看到的所有示例相反——我们应该使用“emit”来发送数据并使用“on”来接收它。哪个是对的?我应该如何监听流式事件?

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    emit 将发送一条消息,然后将收听该消息。现在取决于您在服务器或客户端中的位置,消息将发送到另一端,即如果您在客户端并且您发出,那么服务器将接收,反之亦然。您在这里所做的是使用 npm 包 socket.io-stream 来扩充套接字以流式传输数据。这个想法是客户端请求图像,服务器将其“流式传输”给它们。

    【讨论】:

    • 我是这么想的,但是为什么他们有一个评论说“发送数据”用于 on 和“接收数据”用于发射?
    • 我编辑了答案以解决您的问题。希望对您有所帮助!
    • 那你是说我用“on”方法请求数据,用“emit”方法流式传输数据?我仍然不明白为什么他们会在发出方法上写“接收数据”..
    • 这样想,客户端发出消息以获取文件以及它想要文件所在的流。然后服务器侦听该消息并将文件推送到该流。这与您习惯使用普通 socket.io 的方式有点倒退,但 emit 和 on 用于消息。如果您对流执行相同的操作,则每次需要块时都必须发出一条新消息。我认为这就是为什么决定这样做的原因。
    • 谢谢,这真的很有帮助!我没有意识到常规套接字和流的工作方式不同。对于我的用例,我正在尝试将音频流从我的前端客户端发送到我的后端服务器。所以我需要创建并将流从我的后端发送到我的前端。我的前端应该监听流,然后将音频流通过管道传输给它,然后我的后端可以读取添加到流中的内容。对吗?
    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2017-02-21
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多