Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中ECG/EEG传感器数据的RESTful接口_Rest_Haskell_Restful Architecture - Fatal编程技术网

haskell中ECG/EEG传感器数据的RESTful接口

haskell中ECG/EEG传感器数据的RESTful接口,rest,haskell,restful-architecture,Rest,Haskell,Restful Architecture,我正在从事一个项目,其中我想显示由便携式设备(例如,通过Wifi或蓝牙进行无线数据传输的微控制器)测量的生物传感器EEG/ECG数据。为此,我需要与便携式设备/微控制器接口,其中许多或部分设备似乎都在使用,但也可能提供插座 带有wifi的微控制器的一个例子是,它基于cortex m3和CC3000无线控制器,用于车载wifi接入。要传输的数据大约是每秒500到1000个浮点值,应该以尽可能少的延迟到达REST客户端。可能像Socket这样的非REST方法更适合,但我仍然想测试一种基于RESTFu

我正在从事一个项目,其中我想显示由便携式设备(例如,通过Wifi或蓝牙进行无线数据传输的微控制器)测量的生物传感器EEG/ECG数据。为此,我需要与便携式设备/微控制器接口,其中许多或部分设备似乎都在使用,但也可能提供插座

带有wifi的微控制器的一个例子是,它基于cortex m3和CC3000无线控制器,用于车载wifi接入。要传输的数据大约是每秒500到1000个浮点值,应该以尽可能少的延迟到达REST客户端。可能像Socket这样的非REST方法更适合,但我仍然想测试一种基于RESTFul接口的方法(一个很小的论点是,通过RESFul接口传输数据似乎很常见,并且有很好的库支持)

问:问题是,对于通过REST接口与之接口的performant(在近实时的意义上)实现,最好的方法是什么

我相信这个问题以前已经解决了,但我无法通过谷歌学者或技术/科学博客快速找到一篇解释这一点的文章。我找到的唯一链接是on,但我不确定这是否是一个好方法。在SE上搜索并没有发现关于这一点的过去问题

旁注:我的方法是首先在haskell中实现接口,以测试RESFull接口的设计和性能。稍后,工作方法应使用Java/Android/spark.io/其他微控制器进行移植或实现


(请注意,这个问题完全是关于体系结构的,而不是关于haskell库或其他任何东西。如果使用REST是最愚蠢的事情,我会接受这个答案,如果它是有争议的话。另外,问题是,一般来说微控制器web接口和它们的API,比如d想法,如果它们是通过REST实现的。是这样吗?如果不是,什么“近实时”的定义可以证明REST接口是个坏主意,因此其他通信方式更好。比如:每分钟读取一个传感器?或者,每秒读取一个,1/10秒,1/100秒,1/1000秒?

好的,让我们来看看这个

REST不一定是个坏主意,但它有许多您可能不需要的功能。例如,REST动词不仅用于检索,还用于更新、删除和创建资源。如果这些功能很重要(例如,您需要向EEG控制器发送某些控制数据)然后休息会很好。如果你只想快速访问数据流,不如考虑原始TCP。< /P> 类似地,REST会将消息打包成“请求”和“响应”,这些“请求”和“响应”带有一堆“头”指示诸如请求是否可以满足、是否被压缩等内容。这些功能可能很强大,但可能会膨胀。您可能希望在每个请求上发出足够的数据,以便~1kB的头只占其中的一小部分。但是给定8字节浮点(
double
s),这需要传输500-1000个数据点,你说过这大约需要1秒。这就是我们的命运——总是有1秒的延迟吗

REST将允许您通过声明一个
传输编码:chunked
来避免一些膨胀,这样客户机就可以在单个块可用时对其进行操作。因此,我认为这是一个需要做出的架构决策

我肯定会尽快让
Keep-Alive
工作,这将是我在服务器上查找要使用的库时的主要功能。
Keep-Alive
是HTTP的标准扩展,它可以避免为每个HTTP请求拆下和重建TCP堆栈。如果不这样做,则会有一些繁重的协议每次发送请求时都要进行协商

您必须做出的一个关键决定涉及您是否愿意这样做。您可以将HTTP管道与寿命较长的请求(您不希望立即响应的请求)结合起来,基本上“在数据可用时发送数据”(即,首先发送头,在数据良好且准备就绪时让服务器推出数据)。这是分块传输的替代方案


如果您能够解决这些问题,那么HTTP通常用于每秒发送兆字节,因此您的用例非常适合REST的功能。就Haskell的REST/HTTP库而言,如果您必须自己对控制器进行编程,那么最大的选择是
wai
yesod
snap
,以及
REST
如果你只需要一个HTTP客户端,也有一些。

我不认为REST是实时监控的好范例。我同意,正如问题中所述。@protonfish:你认为什么是最好的选择?理论上,可以做到吗?如果是的,如果需要使用REST,你如何在REST中做到。每个传感器值都有一个以毫秒(或微秒)为单位的ID,因此ID被排序。REST api可以提供上次测量的传感器值的ID。此外,REST api可以提供两个ID之间发生的传感器结果,例如GET-fromID=…&toID=…如果您每0.1秒轮询一次REST接口,则每秒应该可以接收500或1000个浮点值。这是一项研究项目中,我不认为会有多个客户端(或服务器)在任何时候。我讨厌无益,但我会做任何有效的方式,并告诉老板这是休息-他永远不会知道区别。我不知道低层通信的专业知识,也不知道哈斯克尔有哪些库可供您使用。抱歉。扩展Protonfish的评论:将数据从微控制器转移到限制较少的计算机以尽可能最有效的方式,并从中为