猎户座PUB / SUB协议

时间:2016-04-20 20:46:25

标签: fiware fiware-orion

Orion PUB / SUB使用的协议是什么?

例如,NATS使用类似这样的内容:http://nats.io/documentation/internals/nats-protocol/

这种机制在协议层面如何在Orion中运行?

我想使用了以下一些机制:https://github.com/slact/nchan#subscriber-endpoint,以便通过保持打开的HTTP连接将消息推送到订阅者。究竟是哪一个?

BR,

Drasko

3 个答案:

答案 0 :(得分:1)

嗯,Orion HTTP通知最初是为服务器到服务器通信而设计的。实际上,它们允许Orion使用Cygnus或其他机制连接FIWARE“数据链”中的其他组件。

对于服务器到客户端通知,一种替代方法是在Orion和Web客户端之间使用Websocket网关。这已经实施了很多次。

我们现在正在做的是为猎户座通知添加除HTTP之外的“原生”Websocket频道。这些websocket通道可用于服务器到服务器通信或服务器 - 浏览器通信。这并不意味着我们要改变NGSI,这意味着我们将添加另一个通知通道,并修改API以使开发人员能够标记他们想要使用Web套接字通道。

答案 1 :(得分:0)

Orion NGSI API是REST,基于HTTP作为应用程序协议(序列基于TCP / IP作为传输/网络协议)。 Orion也可以在HTTPS模式下使用-https CLI parameter(长期-cert-key)。

过去,我们支持基于CoAP的NGSI API(顺序基于UDP)。但是,该代码不再保留(尽管仍然可用here)。

最后,我们正在开发NGSIv2的websocket传输(我们现在正在使用的NGSI API的新版本),但它还处于非常早期的实验状态。

答案 2 :(得分:0)

@fgalan,

准确地说,NGSI通过HTTP协议指定PUB / SUB,这是不寻常的,可能效率不高。

为了能够从服务器端将消息推送回HTTP订阅者,您必须使用几个技巧:

  • 长轮询
  • 间隔轮询
  • 的EventSource
  • HTTP multipart / mixed
  • HTTP Chunked Transfer

这些会阻止关闭HTTP连接,以便服务器可以在数据到达时将数据推送到订阅者(请注意,这不会阻止您从客户端为每个PUB / SUB重新打开HTTP连接,这也是消耗消耗的)。您可以在此处详细了解:http://mrjoes.github.io/2013/06/21/python-realtime.html

这正是我要问的 - 你在Orion中使用了哪一种方法,请你指点代码。

由于HTTP的这些问题,使用HTTP进行PUB / SUB非常不寻常。没有成功的解决方案(据我所知),所有其他人使用其他指定协议进行RT消息传递 - RabbitMQ(AQMP),Redis,NATS,Kafka,MQTT - 您需要一个适合PUB / SUB的协议如果你想要它有效率。

说到这一点 - 您是否曾将PUB / SUB队列与其他解决方案进行对比?我真的很想在其中一个分析中看到猎户座:http://bravenewgeek.com/dissecting-message-queues/,为此目的与战场证明的SW并排。我想看看延迟和吞吐量......

我可以看到为什么需要WS,但我不知道你如何将它们与NGSI规范对齐 - 你的规范今天要求通过HTTP的PUB / SUB(通过REST调用)。你打算改变规格吗?

致以最诚挚的问候,

Drasko