最簡單的解決方案可能是讓您的服務器只是一個非常基本的XMLRPC服務器。有一個python類來完成這個(SimpleXMLRPCServer)。然後,讓您的客戶每隔幾分鐘連接到該服務器以獲取更新的數據。
有關更多信息,請參見http://docs.python.org/library/simplexmlrpcserver.html
這裏是一個真正的快速和骯髒的例子:
服務器代碼
from SimpleXMLRPCServer import SimpleXMLRPCServer
# for demonstration purposes, just return an ever increasing integer
score = 0
def get_scores():
global score
score += 1
return score
# create server, register get_scores function
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(get_scores, "get_scores")
# start the server
server.serve_forever()
客戶端GUI代碼
import Tkinter as tk
import xmlrpclib
import socket
class SampleApp(tk.Tk):
# url of the server
url = "http://localhost:8000"
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# initialize connection to server
self.server = xmlrpclib.ServerProxy(self.url)
# create GUI
self.status = tk.Label(text="", anchor="w")
self.label = tk.Label(text="current score: ?")
self.status.pack(side="bottom", fill="x")
self.label.pack(side="top", fill="both", expand=True)
self.wm_geometry("400x200")
# wait a second to give the GUI a chance to
# display, then start fetching the scores
# every 5 seconds
self.after(1000, self.get_latest_scores, 2000)
def update_status(self, message=""):
'''Update the statusbar with the given message'''
self.status.configure(text=message)
self.update_idletasks()
def get_latest_scores(self, interval):
'''Retrieve latest scores and update the UI'''
try:
self.update_status("connecting...")
score = self.server.get_scores()
self.label.configure(text="current score: %s" % score)
self.update_status()
except socket.error, e:
self.update_status("error: %s" % str(e))
self.after(interval, self.get_latest_scores, interval)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
與套接字模塊相比是否有優勢,還是偏好問題? –
@Ross B:xmlpc使用套接字來完成它的工作。如果直接使用套接字模塊,則可能需要做更多的工作。 –