将连续数据从4G模块发送到服务器

3

我使用一个Teensy板(可以用Arduino)连接了Telit LE910 4G LTE模块。虽然我能够使用HTTP请求(POST和GET)将数据发送到我的PHP服务器,但由于需要等待服务器响应的延迟,我无法连续发送数据:

  [...]
  // SOCKET DIAL
  LTESerial.print("AT#SD=1,0,80,\"SERVER IP\"\r\n");
  delay(5000);

  // POST
  LTESerial.print("POST /server/index.php?data=");
  LTESerial.print(random(1000));
  LTESerial.print(" HTTP/1.1\r\n");
  LTESerial.print("Host: SERVER IP\r\n\r\n");  
  delay(5000);
  while (getResponse() > 0);

这只是一个示例(在此处编写),但它在某种程度上说明了我的做法。以上的代码应该放在while循环中,这样一旦数据上传到服务器上的.txt文件中,模块就重新连接到服务器并POST另一个数据点。
显然,我希望尽快避免这些延迟,并尽可能快地解析数据到服务器(一旦数据可用)。这就是为什么我选择了4G LTE版本的原因。
调整延迟可能会给我多出一秒钟左右的时间,但我的项目包括实时绘制大量数据点,所以非常时间敏感。
有什么方法可以在4G上发送连续的数据流到服务器上吗?我正在考虑缓冲一些数据点并使用FTP上传数据,但我认为上传文件到服务器甚至可能比现在还要花更多的时间。
非常感谢任何帮助!
2个回答

0

听起来你的使用情况可能更适合于特殊的物联网(IoT)协议,而不是像HTTP这样更倾向于客户端服务器连接的协议。

在物联网世界中有几种协议正在使用,但其中一些最常见的是:

这些协议不仅应该解决您的延迟问题,而且通常还旨在最小化数据开销和处理/电池使用。

您也应该能够找到这些协议的PHP示例 - 例如MQTT的一个示例:


我想继续使用HTTP,因为有限制。无论如何,我完全可以访问WAMP上的私有服务器,这意味着我应该能够启动一个“套接字侦听器”,将4G模块定向到此侦听器并无限流数据。我尝试使用PHP进行此操作,但仍然遇到延迟问题。是否有任何方法可以保持套接字拨号保持活动状态并继续发送POST请求? - Rex

0

我使用上面一些现有的代码,勉强让它工作了,但仍不是最优的。这可能对其他人有用。

这是我所做的:

1)我只在初始化期间拨打一次套接字

2)POST部分无限循环运行。 5秒延迟现在减少到200毫秒,并添加了一些标题,如下所示:

  //unsigned long data = random(1000000000000000, 9999999999999999);
  LTESerial.print("POST /index.php?data=");
  LTESerial.print(data);
  LTESerial.print(" HTTP/1.1\r\n");
  LTESerial.print("Host: ADDRESS\r\n");
  LTESerial.print("Connection: keep-alive\r\n\r\n");
  delay(200);
  while (getResponse() > 0);

3)事实证明,我的WAMP服务器(PHP)在默认情况下在最大HTTP请求、超时等方面存在限制。我不得不在php.ini中增加这些数字(我将它们改为无限制)。

然而,虽然我能够“连续”向我的服务器发送数据,但200毫秒的延迟仍然很长。如果可能的话,我想看到接近串行通信的东西。

此外,在查看串行监视器时,我得到:

[...]
408295030
4238727231
3091191349
2815507344

----------->(THEN SUDDENLY)<------------

HTTP/1.1 200 OK
Date: Thu, 02 Jun 2

2900442411

016 19:29:41 GMT
Server: Apache/2.4.17 (Win32) PHP/5.6.15
X-P16

3817418772

Keep-Alive: timeout=5
Connection: Keep-Alive
Content-Type: te

86026031

HTTP/1.1 200 OK
Date: Thu, 02 Jun 2016 19:29:4

3139838298
75272508
[...]

----------->(After 330 iterations/POSTs, I get)<------------

NO CARRIER
NO CARRIER
NO CARRIER
NO CARRIER

所以我的问题是: 1)我如何消除200毫秒的延迟?

2)如果我的数据点大小不同,延迟也必须相应地改变。如何动态实现这一点?

3)为什么它会在大约330次迭代时停止?如果数据只有4位数,这种情况就不会发生。

4)为什么我突然从服务器得到响应?

我希望有人能够将其用于自己的项目,但这对我的项目来说还不够。有什么想法吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接