服务器架构:websocket多播服务器?
构建通过websocket接收传入连接并将流入该套接字的数据流输出到其他websocket上的订户的服务器的最简单方法是什么。以流媒体应用程序为例,其中一个人正在向服务器架构:websocket多播服务器?,websocket,streaming,live-streaming,Websocket,Streaming,Live Streaming,构建通过websocket接收传入连接并将流入该套接字的数据流输出到其他websocket上的订户的服务器的最简单方法是什么。以流媒体应用程序为例,其中一个人正在向n消费者广播 忽略身份验证之类的事情,构建能够实现这一点的服务器的最简单方法是什么?我有点困惑,当一大块数据进入服务器时会发生什么。它将进入内存中的缓冲区,然后如何将其分配给等待它的n消费者?某种循环缓冲区?websockets是一个合适的协议吗?谢谢 这里有一个使用Ruby的(我是作者,所以我有偏见): 你可以用Ruby终端(irb
n
消费者广播
忽略身份验证之类的事情,构建能够实现这一点的服务器的最简单方法是什么?我有点困惑,当一大块数据进入服务器时会发生什么。它将进入内存中的缓冲区,然后如何将其分配给等待它的n
消费者?某种循环缓冲区?websockets是一个合适的协议吗?谢谢 这里有一个使用Ruby的(我是作者,所以我有偏见):
你可以用Ruby终端(irb
)来测试它——就是这么简单
我用两个浏览器窗口测试了连接,一个是“流”,另一个是监听
- 使用ws://localhost:3000/streamer进行拖缆websocket连接
- 使用ws://localhost:3000/进行客户端连接
each
时,请注意它是从继承的,并使用从派生的数组
Idio的websocket实现在IO处理程序数组中进行迭代(键映射的值的一半),如果IO处理程序是websocket,它将通过“广播”消息到该IO处理程序。调用回调函数并调用它,以避免冲突
Plezi和Plezi使用相同的概念,以便过滤掉不相关的消息
由于性能原因,单播的工作原理略有不同,但基本上是相似的
我很抱歉在我的代码中使用了很多速记。。。我想是红宝石前的习惯吧。我使用条件?when_true:when_false
大量速记,并倾向于将内容压缩成单行。。。但它应该是可读的
祝你好运 嘿!谢谢你的回答。我更感兴趣的是如何设计这个问题的解决方案,而不是如何用特定的语言实现它。期待着挖掘你的图书馆,看看你是如何做到的。谢谢。@bcattle-非常欢迎你。我用代码相关部分的链接更新了答案,以便于深入研究,并试图简要概述该体系结构。。。该体系结构在很大程度上依赖于Ruby实现的OOP模型。我相信它可以用C++来做,也可以用RUID和其他OOP语言,但我不确定它会这么容易。Javascript原型和动态类型可以实现类似的体系结构,但是。。。嗯,我想javascript比C好。如果您的代码从不阻塞繁重的任务,单线程通常会更快。
require 'plezi'
class Client
# Plezi recognizes websocket handlers by the presence of the
# `on_message` callback.
def on_message data
true
end
protected
# this will be out event.
def publish data
write data
end
end
class Streamer
def on_message data
Client.broadcast :publish, data
end
end
# the streamer will connect to the /streamer path
route '/streamer', Streamer
# the client will connect to the /streamer path
route '/', Client
# on irb, we start the server by exiting the `irb` terminal
exit