它可以分爲兩部分:一個線程用於創建實時每五分鐘一次,一旦它有新的數據,數據將被髮送到連接插座。如何每五分鐘向多個客戶端並行發送數據
套接字連接在主線程中建立並由每個生成線程處理。以下代碼給出了簡要說明,目的是每隔五分鐘將glb_data的值發送到所有這些連接的套接字。
import time
from multiprocessing import Process
class Climate(Object):
def update(self, glb_data):
while True:
time.sleep(5)
glb_data += 1
def send_data(connection, glb_data):
xml_text = glb_data.encode()
xml_len = len(data)
connection.sendall(str(xml_len).encode() + b' ' +xml_text)
if __name__ == "__main__":
glb_data = ""
cli_obj = Climate()
cli = Process(name="climate_data", target=cli_obj.update_data, args=(glb_data,))
cli.start()
sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockobj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print "run launchserver"
sockobj.bind((serverHost, eval(serverPort)))
sockobj.listen(5)
while True:
connection, address = sockobj.accept()
print('Server connected by', address)
handleclient = Process(name='handleclient', target=send_climate_data, args=(connection,glb_data))
handleclient.start()
的問題如下:
- 如何獲得所有socket連接,並調用SEND_DATA功能 在產卵線程中運行。就像觀察者模式一樣,它將是完美的。
- 如何確保每個線程都收到最新的glb_data。
標題很奇怪,「實時數據」和「每五分鐘」似乎並不合適。 –
@KlausD。也許有點奇怪,但「五分鐘」和「實時」之間沒有矛盾。實時只意味着您保證在指定的時間內完成 - 時間限制可能因應用程序而異。 – skyking