一个连接上可以有多个“类别”吗?

时间:2018-08-02 13:34:53

标签: javascript c# websocket asp.net-core-2.0 angular6

我将设计一个Angular 6和.netcore 2作为后端API的SPA。我将需要一个套接字实现来进行实时数据流传输和制图。

我有一个页面,需要“实时流式传输”三种不同的数据类型,我的问题是-我可以使用一个websocket连接来做到这一点吗?据我所知,我认为有一种方法可以在连接中创建某种队列或诸如子流之类的东西,因此我可以拥有如下内容:

socket = new WebSocket(url);
socket.on('dataOne', () => { // proccess here }
socket.on('dataTwo', () => { // proccess here }
socket.on('dataThree', () => { // proccess here }

我想知道是否可行,如果可以,可以在我可以用于客户端和API的库上建议我吗?

我已经研究了诸如SignalR的C#和Substream之类的库,但是我不确定。各种建议和解释表示赞赏!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您应仅保持一个连接,并为类别使用多个代理。 像这样

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