如何在socketcluster上以编程方式创建通道?

Pie*_*oth 3 socketcluster

我正在考虑使用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);
 });
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你的帮助,

皮埃尔

Jon*_*Jon 5

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

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

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