我可以在一个连接上有多个“类别”吗?
Posted
技术标签:
【中文标题】我可以在一个连接上有多个“类别”吗?【英文标题】:Can I have multiple "categories" on one connection? 【发布时间】:2018-08-02 13:34:53 【问题描述】:我将设计一个使用 Angular 6 和 .netcore 2 作为后端 API 的 SPA。我将需要一个用于实时数据流和图表目的的套接字实现。
我有一个需要 3 种不同数据类型“实时流式传输”的页面,我的问题是 - 我可以使用一个 websocket 连接来做到这一点吗?据我所知,我认为有一种方法可以在连接中创建某种队列或类似子流的东西,所以我可以有以下内容:
socket = new WebSocket(url);
socket.on('dataOne', () => // proccess here
socket.on('dataTwo', () => // proccess here
socket.on('dataThree', () => // proccess here
我想知道这是否可行,如果可行,您能否就可用于客户端和 API 的库向我提供建议?
我研究过 SignalR for C# 和 Substream 等库,但我并不完全确定。各种建议和解释表示赞赏!
【问题讨论】:
【参考方案1】:javascript 和 C#都有现有的 SignalR 客户端。你应该使用那些。除此之外,我不确定你在说什么。如果这就是您的意思,您不需要单独的集线器。归根结底,SignalR 非常简单:您只需发送一条消息,客户端就会绑定到该消息类型,并在收到它时执行一些操作。逆向过程大致相同:客户端只需“调用”在您的集线器上定义的某个方法,然后它会执行一些操作。
因此,您可以绑定到几乎任何东西客户端,而服务器只需要发送该特定消息即可导致某些事情发生。例如:
let connection = new signalR.HubConnectionBuilder()
.withUrl("/myhub")
.build();
connection.on("dataOne", data => ... );
connection.on("dataTwo", data => ... );
connection.on("dataThree", data => ... );
connection.start().catch(err => console.error(err.toString()));
然后,服务器端:
await _hub.Clients.All.SendAsync("dataOne", data);
【讨论】:
【参考方案2】:您应该只与一个连接并为您的类别使用多个代理。 像这样的
var contosoChatHubProxy = connection.createHubProxy('ContosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName, message)
console.log(userName + ' ' + message);
);
var categoryOneHubProxy = connection.createHubProxy('categoryOne');
var categoryTwoHubProxy = connection.createHubProxy('categoryTwo');
详情refer
【讨论】:
以上是关于我可以在一个连接上有多个“类别”吗?的主要内容,如果未能解决你的问题,请参考以下文章
requests.post 可以在慢速(但不是死)连接上超时吗? [复制]
mysql和eclipse已经连接上但是没有创建表回出现异常吗?