我考虑使用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);
});
我认为这个新创建的频道会将我的授权中间件用作middlewares are defined at server level (wsServer.addMiddleware(wsServer.MIDDLEWARE_SUBSCRIBE, ...)
非常感谢你的帮助,
皮尔
答案 0 :(得分:3)
使用SocketCluster,会自动为您创建和销毁频道,因此您无需管理其生命周期。如果至少有一个客户端订阅了它(基于频道名称),将在后端创建一个频道,并且一旦所有这些客户端断开连接或取消订阅,将自动销毁该频道。 SC也解决了失败案例 - 例如如果互联网连接意外丢失。
SC旨在高效地创建和销毁大量独特的频道。每个用户可以拥有数百个独特的频道(总共可能有数千甚至数百万个独特频道)。如果频道空闲并且每个频道的内存占用很小,频道就不会消耗任何CPU。
SC中的通道不是消息队列(与RabbitMQ,NSQ,Kafka,Stomp ...提供的不同); SC不会将消息存储在持久队列中(尽管您可以使用自己的持久性逻辑扩展SC)。