javascript - 将实时数据从联网 C 程序发送到浏览器客户端进行绘图

标签 javascript c sockets asp.net-core websocket

我面临一个架构问题,到目前为止我似乎无法找到合适的解决方案。 我有一个 Linux 盒子,它只是一台通过以太网电缆连接到网络的机器,运行 Linux。它以大约 3000 个样本/秒的速度从 ADC(模数转换器)采样值。在每次采样时,它实际上对 ADC 的所有 8 个 channel 进行采样。所以,我每秒有 3000*8 DOUBLE 类型值。

我的问题如下:将此数据实时传输到运行 Web 应用程序的客户端,并使用一些 Javascript 框架将其绘制在那里。 Linux 机器上的程序必须是C 语言。我尝试避免像 .NET Core 那样的互操作,以避免复杂性。

到目前为止我做了什么?

我已经用 C 语言实现了一个 Web 服务器,作为子进程与对 ADC 值进行采样的父进程一起运行。 (实际上家长不需要采样,我在将其合并到这个程序之前做了一个演示)。服务器可以提供 GET 请求,它只知道响应所有 8 个 channel 的 JSON 格式的值,如下面的屏幕截图所示。这是我从计算机发出的请求: screenshot of me calling the server on the box. Receiving JSON data back.

请注意,我只希望它在本地网络上运行。

现在,我认为我可以拥有一些 JS 框架,通过在 Ajax GET 中连续调用 192.168.1.95:8080 来接收来自此 Linux 机器的数据请求,并同时绘制所有 8 个 channel 。那可行吗?这个设计有多糟糕?这会让浏览器崩溃吗?请注意,每个请求(如屏幕截图中的请求)发送时都需要 ~260 字节,响应 (JSON) 为 ~130 字节(大约 50% 的交换数据是 HTTP header ) )。

我的感觉是,如果我继续这样做,我将浪费 Linux 盒子采样的 99% 的数据,而只能在客户端 Web 应用程序中获取极少量的数据。请注意,我还没有完成网络应用程序。所以,我不知道它的实际表现如何。不过,我可以告诉你,Linux 机器上的服务器速度相当快。另外,它仅适用于本地。

如果我可以在浏览器中使用套接字,则更好的解决方案是。那么,这会快得多(我认为)。

您能提出更好的方法吗?我还接受一个也可以在本地网络之外使用的解决方案。我正在寻找一个可扩展的解决方案。对于客户端应用程序,我打算使用 ASP.NET Core。

我想我已经想到了:Web Sockets(使用 C 库?)?这样会更快吗?

如果您能给我任何东西,我将不胜感激。

在代码方面,代码如下:

https://github.com/giorgi3092/ECG_HW_SW_DE1_SoC/blob/master/adc_example/web_server/web_server2.c

最佳答案

对于您的用例,WebSocket 绝对比 HTTP 轮询更具可扩展性。

如果您想提高系统整体性能,可以使用更紧凑、更高效的数据序列化格式,例如 MessagePack ,它可用于多种编程语言(对于您的情况,JavaScript 和 C)。

在更极端的情况下,现有序列化格式不能很好地工作,那么您可能需要直接将 double[] 编码为 uint8_t[] (C)您的服务器并推送到浏览器,然后使用 TypedArray (JavaScript) 在浏览器中访问服务器编码的值。

另一方面,我认为在这种情况下,C# (.NET Core) 可以像 C 一样工作。

关于javascript - 将实时数据从联网 C 程序发送到浏览器客户端进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60257750/

相关文章:

c# - 将 C# 客户端集成到 node.js + socket.io 聊天应用程序中

javascript - 将 JSON 中包含引号、URL 等的大型 Javascript 对象传递给 POST 调用

c - 为嵌入式应用构建固件补丁

c - 数组输出指针

python - Flask运行问题: socket.错误:[Errno 98]地址已在使用中

ruby-on-rails - 无法加载此类文件 -- 套接字 (LoadError)

javascript - JS通过引用推送对象的原因是什么?

javascript - 如何防止用户在我的测验中选择多个答案?

c++ - 将 IP 数据包重定向到我的应用程序,然后将它们转发

c# - 如何检测断开连接的套接字 C#?