2013-02-16 106 views
1

我已經計劃用一個服務器和多個客戶端構建一個應用程序。當客戶端首次連接到服務器時,必須給它一個id。每當客戶端發送一個請求時,服務器向客戶端發送一組字符串,客戶端然後處理這些字符串,一旦完成,它又向服務器發送另一組字符串的請求。字符串存在於服務器上的數據庫中。客戶端服務器通信網絡編程python

我已經實現了處理字符串的客戶端程序的一部分,但我不知道如何實現服務器和客戶端之間的通信。

我正在開發這個應用程序使用python.I不知道網絡編程,因此我不知道如何得到這個工作。

我遇到了套接字編程和麪向消息的中間件,消息隊列,消息代理,我不確定這是否是我需要的。請任何人請告訴我我需要使用哪些主題以及需要學習哪些主題以獲取此內容工作。我希望我聽起來不含糊。

回答

0

我認爲你應該看看XML-RPC協議,它允許你使用代理對象而不是編寫低級套接字的東西。

Python在實現它的標準庫中附帶兩個模塊,xmlprclib實現客戶端,而SimpleXMLRPCServer實現服務器。在python3中,它們被重命名爲xmlrpc.clientxmlrpc.server

這兩個模塊都配有someexamples用法,可能會給你一個關於如何讓他們爲你工作的想法。

特別是您的服務器會公開一個函數來註冊該客戶端,返回一個新的客戶端ID以及一個處理字符串並返回結果的函數,客戶端將簡單地在代理對象中調用該方法。它應該很容易實現。

+0

謝謝,現在我可以在我的服務器中註冊並返回id,另一個返回字符串,另一個接收來自客戶端的一些響應作爲參數並返回任何內容。 – user2078134 2013-02-16 11:14:14

+0

@ user2078134我給你的最後一個建議是仔細檢查你的函數接受什麼對象作爲參數或返回值。在['ServerProxy'](http://docs.python.org/2/library/xmlrpclib.html#xmlrpclib.ServerProxy)的文檔中,有一個表格顯示了類型的處理方式。 – Bakuriu 2013-02-16 12:01:28

0

我可以建議使用類似beanstalkd的東西。

這樣你就可以創建一個服務器,將'字符串'推送到一個隊列中,一個或多個客戶端可以從該隊列中取出一個'字符串'進程,然後在完成時獲得另一個'字符串'。

我相信以這種方式使用隊列比創建插座等

只是走的例子了他們的網站更容易。

服務器?

>>> import beanstalkc 
>>> beanstalk = beanstalkc.Connection(host='localhost', port=14711) 
>>> beanstalk.put('hey!') 
1 

客戶端?

>>> job = beanstalk.reserve() 
>>> job.body 
'hey!' 
>>> job.delete() 

死簡單與創建「請求」,「結果」,「錯誤」隊列(管)的能力使用。

它可能並不適合你的目的,但它是值得銘記的。