2016-05-26 50 views
2

我已經連接到Teensy板(Arduino會這樣做)的Telit LE910 4G LTE模塊。雖然我能夠使用HTTP請求(POST和GET)將數據發送到我的PHP服務器,我無法發送連續數據由於需要延遲的服務器來回應對:從4G模塊發送連續數據到服務器

[...] 
    // 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上傳數據,但我認爲上傳文件到服務器甚至可能比現在需要更多的時間。

任何幫助非常感謝!

回答

0

聽起來好像您的用例可能更適合特殊的IoT(物聯網)協議,而不是更多的客戶端服務器連接定向協議,如HTTP。

有在物聯網世界中使用的幾個協議,但一些最常見的有:

這些不僅應該解決您的延遲問題,而且通常還旨在最大限度地減少數據開銷和處理/電池使用。

你應該能夠找到PHP示例這些還 - 例如一個用於MQTT:

+0

由於受到限制,我想繼續使用HTTP。在任何情況下,我都可以完全訪問WAMP上的私有服務器,這意味着我應該能夠啓動'套接字監聽器',將4G模塊引導到此監聽器並無限制地傳輸數據。我嘗試使用PHP,但我仍然遇到這些延遲。有沒有辦法保持套接字撥號活着並繼續發送POST請求? – Rex

0

我有點明白了使用一些現有的代碼上面的工作,但它仍然不是最佳的。這可能對其他人有用。

這是我做過什麼:

1)I插口撥一次(初始化期間)

2)後段的循環中運行無限。現在的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-ish迭代?如果數據只有4位數字,則不會發生這種情況。

4)爲什麼我突然從服務器得到響應?

我希望有人可以將它用於他們自己的項目,但是這不足以滿足我的需求。有任何想法嗎?