3

我正在考虑使用socketcluster来构建一个实时应用程序。文档非常清楚,但我找不到以编程方式按需创建频道的方法。

我的需要是:作为用户,我想调用一个 REST API,它将创建一个通道,该通道将立即在服务器上启动并运行。

例如,从客户端调用:POST https://<myServer>/api/channels使用 JSON 正文{ "channel": "myChannel}将在服务器上创建一个myChannel通道,并且我的客户端代码将能够直接订阅(在收到服务器响应后):

 var myChannel = socket.subscribe('myChannel');
 myChannel.publish('myChannel', 'I am here !');
 myChannel.watch(function (data) {
     console.log('received data from myChannel:', data);
 });

我想这个新创建的频道将使用我的授权中间件,因为中间件是在服务器级别定义的 (wsServer.addMiddleware(wsServer.MIDDLEWARE_SUBSCRIBE, ...)

非常感谢你的帮助,

皮埃尔

4

1 回答 1

5

使用 SocketCluster,会自动为您创建和销毁通道,因此您无需管理它们的生命周期。如果至少有一个客户端订阅了通道(基于通道名称),则将在后端创建一个通道,并且一旦所有这些客户端断开或取消订阅该通道,该通道将自动销毁。SC 也考虑失败案例 - 例如,如果互联网连接意外丢失。

SC 旨在高效地动态创建和销毁许多独特的频道。每个用户可以拥有数百个独特的频道(因此总共可能有数千甚至数百万个独特的频道)。如果通道处于空闲状态并且每个通道的内存占用很小,则通道根本不会消耗任何 CPU。

SC 中的通道不是消息队列(与 RabbitMQ、NSQ、Kafka、Stomp 提供的不同......);SC 不会将消息存储在持久队列上(尽管您可以使用自己的持久逻辑扩展 SC)。

于 2017-02-11T18:53:23.897 回答