首页 > 解决方案 > 我可以在一个连接上有多个“类别”吗?

问题描述

我将设计一个使用 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 的库向我提供建议?

我研究了 C# 和Substream的 SignalR 等库,但我不完全确定。各种建议和解释表示赞赏!

标签: javascriptc#websocketasp.net-core-2.0angular6

解决方案


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);

推荐阅读