我有一个网络传感器发送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