2011-03-19 103 views
2

研究員StackOverflowers的服務器端數據接收,什麼技術用於大規模的移動應用程序

我們正在建立一個iOS應用,將記錄這將有在特定的時間被髮送回我們的服務器數據。除了確認數據已成功接收外,服務器不會將任何數據發送回客戶端。服務器上的處理負載可能成爲一個問題,所以我們希望設計我們的服務器/客戶端通信,以使開銷保持儘可能低。

1)使用PHP將接收到的數據寫入文件系統/數據庫是否明智?它很容易維護,但可能比Glassfish中的Java應用程序(如果我們選擇原始套接字連接時在C中爲「手動編碼的」服務器守護程序)效率低很多。

2)將接收到的數據直接寫入MySQL數據庫(運行在同一臺服務器上)是明智的做法,還是您認爲我們應該先將數據寫入文件系統,然後將數據解析爲與接收數據庫異步的數據(即服務器有資源需要備份的時間)

3)看起來很聰明:使用協議如HTTP或FTP,或者構建我們自己的服務器守護進程並讓客戶端連接到在此大量簡化的例子在它的插座,並推數據,如:

SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 
write(SocketFD, theData, sizeOfTheData); 

或者,如克魯梅爾爾指出,這也許是一個關於服務器負載的非問題?

提前致謝!

+0

我沒有看到問題。如果很多用戶打你的服務器,它會變得很慢。我看不出使用的傳輸協議如何對降低CPU負載產生重大影響?你想避免許多用戶同時帶上CPU嗎?如果是,然後扼殺它們或回答你的客戶在x分鐘內重試。 – Krumelur 2011-03-19 22:49:12

回答

3

所有這三個問題的答案取決於您的預算和負載的嚴重程度。

  1. 我認爲php不是明智的選擇。如果你有時間和技巧用C或C++或其他東西編寫某些東西,我建議你這樣做。特別是因爲這將提供線程控制。如果你的預算沒有達到那麼大的話,那麼Java就像你所說的那樣是一個很好的選擇,或者是Ruby或者Python。

  2. 我會建議使用sqlite在應用程序中存儲數據。如果只有部分數據被髮送,並且可以將該部分與其他部分分開,請考慮將所有數據放在單獨的sqlite數據庫中。你可以發送整個文件。如果你只需要一部分數據並且非常關心服務器負載,那麼我猜你有兩個選擇。以太網讓應用程序創建一個包含所有數據的sqlite文件來傳輸併發送該文件。或者只是發送一個序列化數組。

    首先想到的是,我會說你應該在服務器端使用一個sqlite數據庫,以緩解從傳入數據解析到數據庫的過程。第二個想法認爲這是一個壞主意,因爲sqlite不支持多線程,並且如果你的負載將會非常巨大,這是不可取的。

  3. 爲什麼不使用websockets?大多數語言都有可用的守護進程。您可以爲希望發送數據的每個客戶端打開一個套接字,而不必在需要處理的線程可用時發送綠燈「現在就發送」。交通完成後,您將處理連接。但是,如果請求的數量太大,服務器必須處理重新調度以至於需要更多的cpu而不僅僅是Krumelur的功能,那麼這隻會是有效的。

我不知道你在建什麼,以及它將如何產生如此龐大的服務器負載!

相關問題