2010-11-11 15 views
1

我在尋找一個最佳實踐爲以下情形:最佳實踐:從iOS的發送連續數據(如GPS位置)到另一個客戶端

移動設備(iOS版)發送其(傳感器 - )數據到另一臺設備(iPad,筆記本電腦,PC,無論)在互聯網上的實時

當然,我需要一個web服務,但據我瞭解,web服務會「調用」並返回數據或獲取數據。但我需要幾乎實時地在兩個設備之間不斷交換傳感器數據。我正在尋找像多人在線遊戲這樣的東西,他們如何做這樣的事情?還是Glympse服務?

回答

1

我接近它的方式是在網絡上創建一個「服務器」,它將運行一些應用程序(如CGI腳本)來收集數據(將其存儲在數據庫中) - 然後允許遠程設備查詢它。

這意味着設備有一個「衆所周知的服務」,他們正在連接到 - 可能「登錄」 - 並從中選擇數據。例如,每個「客戶」都可以推送他們的「船名」和GPS位置。服務器上的CGI腳本將把這些放在MySQL數據庫中 - 就像包含「船名」和「位置」的簡單表格一樣。

Alternativiley,客戶可以查詢和「拉」GPS位置的特定船名。作爲將「Vesel Name」作爲值的簡單CGI腳本,並將MySQL查詢發送到數據庫以返回「位置」。它可以將位置(和船名)以XML格式發回。

iPhone客戶端可以使用NSXMLParser - 甚至JavaScript「AJAX」客戶端可以使用它自己的固有XML解析功能來發送一個(或多個)船隻的請求,並接收結果。

做什麼不想要做的是有每個客戶有直接對話對方客戶。這會讓你遇到防火牆規則的麻煩,並且在嘗試擴展多對多通信時會陷入困境。

+0

這種方法聽起來很紮實,但會是速度足夠快以至於感覺數據實時崩潰?好的,我必須試一試!我同意你的意見,我不希望這兩個客戶端直接連接。 – CaptnCrash 2010-11-15 09:35:18

+0

如果你希望它「足夠快」 - 你需要考慮客戶端如何從服務器獲取數據,以及服務器如何饋送它。例如,客戶端可能會想要在後臺線程中執行阻止請求,而不是客戶端發送偶爾的「輪詢」請求 - 而服務器只有在有數據時纔會進行響應。因此,當服務器端代碼出現新位置時,它會檢查所有未完成的會話以查看誰正在等待此數據,然後立即將數據發送給它。 – Brad 2010-11-15 17:33:57

0

如果您的設備都運行iOS,您可以使用GameKit中的點對點連接功能。關於here有一個很好的問題和答案。

僅僅因爲它被稱爲GameKit並不意味着它的用途僅限於遊戲。你想通過這個連接泵的任何數據都是公平的遊戲(可以這麼說)。

+0

據我瞭解,GameKit P2P只適用於藍牙或本地WiFi?我必須通過互聯網發送數據,因爲發件人和收件人不在本地網絡中 – CaptnCrash 2010-11-15 09:32:39

2

「只是因爲它是所謂的GameKit並不意味着它的用途僅限於遊戲。你想通過該連接泵的任何數據是公平遊戲」

如何真實。 GameKit這個名字是一個可怕的用詞不當,它非常不幸地削弱了它的重要性,這個工具包中有這麼多,你可以開發嚴肅的應用程序。

0

您可以使用XMPP協議幾乎實時地發送/接收任何xml數據。 您需要創建聊天室,並且每個XMPP客戶端(您的應用程序)都需要登錄到該房間。發送到房間的消息將傳送給每個XMPP客戶端。在協議和公共服務器

信息可以在這裏找到:http://xmpp.org/
好書XMPP:http://download.cnet.com/XMPP-The-Definitive-Guide/3000-20412_4-75114351.html
鏈接到免費的iOS XMPP庫可以在這裏找到:iOS messenger SDK

相關問題