[英]Publishing data via socket after connection is aborted
我有一個Python(2.7)腳本,該腳本正在從文件中讀取實時數據並將其(通過網絡)發布到另一台計算機上的服務器。 該服務器特別是石墨的Carbon
服務器部分。
該代碼的相關部分如下:
import socket
CARBON_HOST = 'COMPUTER-NAME'
CARBON-PORT = 2003
CARBON_PATH = 'folder.name.meaurement'
s = socket.socket()
s.connect((CARBON_HOST, CARBON_PORT))
while True:
if s:
s.send('%s %s %s\n'%(CARBON_PATH, str(data), int(time.time())))
time.sleep(WAIT)
data
是從我的文件導入的最新條目,而time
是通常的time
。
當我關閉Carbon
服務器所在的計算機COMPUTER-NAME
,出現此錯誤:
s.send('%s%s%s \\ n'%(CARBON_PATH,str(data),int(time.time())))
socket.error:[Errno 10053]主機中的軟件中止了已建立的連接
重新啟動主機( COMPUTER-NAME
)時,必須重新啟動Python腳本才能再次發送數據。
有沒有一種方法可以告訴socket
在斷開連接時暫停,或者繼續嘗試直到連接再次打開?
我建議閱讀有關socket.timeout(“ seconds to sleep”)的信息,這將使您有使用它的想法。 在您的情況下,請在建立套接字連接之前立即使用socket.settimeout(),然后在socket.connection()之后立即使用socket.settimeout(None)。 這樣,您可以延遲建立連接。 但是,如果超時值超出系統/服務器停機時間,則腳本最終將出現相同的超時錯誤。
connect_timeout = 100 #in seconds
socket.settimeout(connect_timeout)
socket.connect()
socket.settimeout(None)
檢查是否可行?
在socket.error
異常之后,您不能使用同一套接字,連接斷開。 但是,您可以捕獲異常,創建新的連接,然后使用該連接發送數據。
關於最后一個問題,您可以告訴程序繼續嘗試,直到使用while循環發送數據為止。 一個基本的例子
import socket
import time
CARBON_HOST = 'COMPUTER-NAME'
CARBON_PORT = 2003
CARBON_PATH = 'folder.name.meaurement'
WAIT = 10
s = socket.socket()
s.connect((CARBON_HOST, CARBON_PORT))
data = 'my data'
while True:
packet = '%s %s %s'%(CARBON_PATH, str(data), int(time.time()))
while True:
try:
s.send(packet)
break
except socket.error as e:
print(e)
s.close()
s = socket.socket()
s.connect_ex((CARBON_HOST, CARBON_PORT))
time.sleep(WAIT)
s.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.