我有一個網絡傳感器發送XML警報,然後我們可以解析出各種原因使用。在我的情況下,我想要使用這些警報來解析出警報ID,以便我可以從傳感器中取出保存的項目,並將其保存爲以下格式:線程服務器從網絡傳感器接收XML警報
我打算處理這個問題的方式是我將有一臺服務器在Linux系統上監聽,並且每當我感興趣的項目(例如報告)被保存在傳感器上時,傳感器就會向該系統發送警報。
我在Python中創建了一個簡單的套接字服務器,它接受傳入的連接,但對Python來說是新手我很好奇是否有更好的方法來實現服務器。我已經看到了一些使用ServerSocket而不是socket的建議,只是對更有經驗的開發人員感興趣。我也想實現一個套接字超時或其他一些功能來在套接字上沒有更多數據時關閉套接字。我試過socket.settimeout(),但套接字只是立即關閉,所以現在我有一個臨時佔位符,我可以從客戶端發送「關閉」來關閉套接字。
任何幫助和建議將不勝感激。工作代碼如下,請注意它的髒,因爲我是Python新手。
from socket import *
import thread
# Server parameters
HOST = ''
PORT = 8000
ADDR = HOST, PORT
BUFF = 4096
def handler(clientsock,addr):
while 1:
data = clientsock.recv(BUFF)
if not data:
break
clientsock.send(response(data))
# Closes the connection
# Temp until I can get timeout to work
if data.rstrip() == "close":
break
clientsock.close()
print addr, "- closed connection" #log on console
def response(data):
return 'Data sent: ' + data
if __name__=='__main__':
server = socket(AF_INET, SOCK_STREAM)
server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
try:
server.bind(ADDR)
server.listen(5)
except sock.error as msg:
print('Unable to bind to ', ADDR)
print('Error code: ', msg[0])
print('Message: ', msg[1])
while 1:
print 'waiting for connection... listening on port', PORT
clientsock, addr = server.accept()
print '...connected from:', addr
thread.start_new_thread(handler, (clientsock, addr))
謝謝!
經過一番閱讀後,也許我應該利用socket.settimeout()或setdefaulttimeout()f或關閉套接字以防止擁塞的目的?另外從閱讀它似乎我應該使用ServerSocket而不是隻是套接字類。 – user3569125