2015-11-20 59 views
1

我正在python中創建一個兼容備註的應用程序。 在這裏,運行該應用程序的計算機上的一個人可以在屏幕上創建服務器([color,pixel],其中pixel = [x,y])將被髮送給連接到服務器的其他人。在python中通過本地服務器進行通信

我使用kivy來創建應用程序。我的問題是關於通過服務器傳輸數據。 我可以使用這個創建服務器:

import socket 
ip_address=socket.gethostbyname(socket.gethostname()) 
execfile("manage.py runserver "+ip_address+":8000") 

現在,怎麼辦別人連接到服務器並請求數據(假設上面的代碼是正確的)。另外,如何在django中發送數據。

回答

1

那麼,Django是一個允許創建可通過HTTP協議訪問的站點或API的框架。這對你有幾個結果:

  1. 服務器不能發送消息給客戶端,除非客戶端詢問。 HTTP是一個「請求 - 響應」協議。客戶端發送請求(例如,http://server.com/getUpdates?id=100500)並從服務器獲得響應。

  2. 創建要求服務器始終向其提供更新的客戶端是不好的做法,可能會導致服務器DoS。

  3. 雖然您可以使用WebSockets,但使用Django來處理這樣的任務實際上是一種矯枉過正。

總結,您需要一個可靠的雙向通道來雙向發送數據。我會從TCP服務器開始,而不是HTTP。幸運的是,Python stdlib有一個模塊,您可以從 - socketserver開始。

補充閱讀

  1. TCP
  2. UDP(你可能會想這對於廣播)
  3. Berkeley sockets(插槽的標準的基礎socketserver模塊)

TCP與UDP

在決定所使用的協議,應從以下幾個方面考慮:

  • TCP是可靠。消息不會隱含消失。如果出現網絡錯誤,郵件將被重新發送。如果沒有連接,則會引發明顯的錯誤。 TCP使用幾種算法來適應網絡通道。這是一個智能協議。

  • UDP是不可靠。它沒有TCP的功能。數據包可以消失,重新排序。但是,UDP消息是輕量級的,並且在經驗豐富的手中,他們召喚生活中的網絡動作遊戲和流式視頻等系統(丟失和重新排序的消息在這裏並不重要,而TCP變得太慢)。

所以我建議先從TCP開始。與UDP相比,快速,正確地工作更容易。如果您對TCP有一定的使用經驗,請切換到UDP,並且有許多人使用您的應用程序並希望儘可能獲得最低延遲。

+0

@ Vovanrick2002謝謝你的回答!你能告訴我哪種情況會更好,在這種情況下TCP或UDP? –

+0

@AbhishekBhatia更新了帖子。 – Vovanrock2002

相關問題