2016-08-03 83 views
1

我想爲我的桌面和我的android應用程序創建一個程序。他們兩人都會這樣做,只是在這些不同的設備上。他們會像個人助理一樣,所以我想把大量的數據放入他們(例如聯繫人,筆記和其他大量的東西)。所有這些數據都應該保存在服務器上(至少在開始時我會在家中使用自己的Ubuntu服務器)。簡單的服務器和客戶端通信

爲Android應用程序,我顯然會使用Java和數據庫服務器上的將是一個MySQL數據庫,因爲這是我用過的一切數據庫。 Windows程序很可能用這些語言編寫:Java,C#c C++,因爲這些是我能夠很好地使用的語言。

我們的問題/問題:服務器應該具有將與應用程序/項目進行通信一個很好的後端並在數據庫中讀/寫數據,管理用戶和所有的東西。但我不確定我應該如何編程後端和「網絡通信」本身。我真的很想有一些相對簡單的方法在服務器和客戶端之間發送安全的消息,但是我在這方面沒有經驗。我一般都有編程經驗,但不具備後端和網絡編程。

旁註:
我想「規模很大」。起初這個系統只會被我使用,但它可能會向更多的人開放,甚至被賣出。
此外,我真的想在服務器上(部分)自編程後端,因爲我很可能用這個了很多其他的東西,像我的房子一定程度的自動化功能,這將得到實施。

編輯:我想能夠規模大。我並不需要爲數百人在一開始的支持;)

回答

0

你需要研究Socket編程。它們提供相對簡單,安全的網絡通信。本質上,你將在你的服務器上創建某種連接或套接字偵聽器。客戶端將創建套接字,初始化它們以連接到特定的IP地址和端口號,然後連接。一旦服務器接收到這些連接,服務器將爲該特定連接創建一個套接字,並且這兩個套接字可以來回通信。

如果你希望你的服務器能夠處理多個客戶端,我建議創建一個新的線程在每次服務器接收到一個連接的時間,該線程將被專用於特定的客戶端連接。擁有一個多線程服務器,其中每個客戶端都有自己的專用線程,這對於高效服務器來說是一個很好的起點。

這裏有插座客戶端和服務器的一些很好的C#示例:https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx

作爲一個側面說明,你也可以寫在C#與Xamarin Android應用。如果你使用C#編寫桌面程序和Android應用程序,那麼你可以編寫大部分代碼並輕鬆地在兩個應用程序之間共享它。

我建議你開始通過以掌握它們將如何在較大的項目進行通信創建非常簡單的客戶端和服務器應用程序學習socket編程。一旦你能夠很好地掌握溝通過程,就開始設計你的大型項目。

0

但我不知道我應該如何編程後端和 「網絡通信」本身。

傳統上,您的情況的服務器將是一個暴露REST API(JSON)的Web服務器。所有客戶端都需要執行http請求並呈現/解析JSON。 REST API被映射到數據庫調用並公開一些數據模型。如果是在Java中,它將是Jetty Web服務器,Jackson Json解析器。

我真的很想有一些相對簡單的方法來發送服務器和客戶機之間的安全 消息,

發送HTTP請求可能與服務進行通信的最簡單的方法。保證安全就是在服務器端啓用HTTPS並實施一些用戶訪問驗證和操作授權。使用Jetty for Java啓用HTTPS將需要幾行代碼。身份驗證通常通過OAuth2技術完成,授權可以基於ACL。你可能會超越這一點,並且在靜止時加密數據並採用其他做法。

我想 「規模大」。起初,這個系統只能由 我可以使用,但它可以打開更多的人甚至出售。 我想能夠擴大規模。我不需要支持 數百人開始

我預計可擴展性可能成爲主要挑戰。根據您想要擴展的程度,您可能需要訪問分佈式(大數據)數據庫以及分佈式服務和消息傳遞層。

而且我真的想給 服務器上的(部分)自編程後端,因爲我很可能用這個了很多其他的東西, 像我的房子一定程度的自動化功能,這將是實現。

我不知道你的意思自我編程。通常後端封裝了一些應用程序特定的業務邏輯。

  • 它可能是你的數據庫和http傳輸層之間的一塊邏輯。
  • 在更復雜的情況下你的邏輯可以被放入後端背後異步服務,這樣的服務可以做的工作沒有阻擋客戶的要求。
  • 在最(可能)複雜的情況下你的後端可以做機器學習(例如,如果你想你的軟件堆棧相應地瞭解你的家庭是習慣和自動化的房子到你的期望,而無需實際編碼這種自動化)

但我沒有這方面的經驗。我的編程經驗總體上是 ,但沒有後端和網絡編程。

如果你可以編寫代碼,寫一個後端不是很難的問題。有很多資源。但是,您需要時間(或金錢)來學習並完成它,這會讓您從應用程序的開發中分心,或者您可能會喜歡它。

內部開發後端的替代方案可能是後端即服務(BaaS)在雲中或在場所中。這個市場上有很多產品。 BaaS將允許您完全消除後端的開發(或接近此)。在它至少應該做到:

  • REST API數據存儲與配置的數據模型,
  • 安全,
  • 的可擴展性,
  • 定製業務邏輯

免責聲明:我我是webintrinsics.io團隊的成員,這是一個後端即服務。如果您需要,請查看我們的網站和聯繫方式,我們將能夠與您一起工作並幫助您與BaaS或指導您使用一些有用的資源。

祝你的工作順利!