【问题标题】:Communication between WebApi (MVC-C#) as server <=> android and raspberry device as clientsWebApi (MVC-C#) 作为服务器 <=> android 和 raspberry 设备作为客户端之间的通信
【发布时间】:2021-05-23 18:36:14
【问题描述】:

我们有一个项目,有 1 个服务器和 2 个客户端

  1. 服务器(webapi c#-mvc):在 https:domain.com:2020 上运行。
  2. client1:安卓应用
  3. client2:覆盆子设备(作为物联网设备)

这两个客户端使用 WebApis 连接到服务器并通过 api 调用获取和发布命令并更改数据库中的状态。

问题: 客户端必须对服务器进行轮询(实时)以查找数据库中是否有更改以更新其状态。 我可以用什么来投票?我认为 socket 是最好的,但我不知道应该如何在我的 webapi 中使用 socket,我看到了很多例子,但它们都在控制台应用程序上运行。

我发现了这个 example 但我认为它不是完整的代码,我不知道应该如何在我的 webapi 控制器中使用它。我应该继承还是不继承?

提前致谢:)

【问题讨论】:

    标签: c# android sockets asp.net-web-api server


    【解决方案1】:

    这个用例有一个库 - SignalR,易于使用,它适用于 4 种传输协议:websocket、永久帧、服务器发送和长轮询。另一种方法是使用本机 websocket 支持,但在这种情况下,您需要维护 websocket 的状态(如果您愿意,可以使用任何套接字)。

    SignalR需要客户端库(或者你可以在阅读规范后编写一个)并且正式可用于c#和JavaScript,你可以找到一些编程语言的库,如java和python,由社区创建。

    【讨论】:

    • 谢谢,但我认为 signalR 使用 websocket 作为长轮询协议(这不是我们的首选)...如果我错了,请告诉我是否可以使用 signalR 将状态发送到一个特定的用户未向所有客户端广播。我找不到一个很好的例子
    • 您提到的示例也是 websocket 示例,据说如果 websocket 不可用,SignalR 将回退到其他传输协议,您也可以在配置中禁用它。您可以根据客户端 ID 向特定客户端发送信息,或者如果将其与身份映射,则可以使用用户 ID 将数据推送给特定用户。
    • 希望这个链接能提供一些见解:stackoverflow.com/q/19522103/3576971
    • 只是一点 - websocket 和长轮询是两种不同的传输协议,就它们的行为和性能而言。你可以阅读更多github.com/aspnet/SignalR/blob/master/specs/…
    • 太棒了,我会尝试做你的建议,我会在这里发送结果:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多