对web套接字完全陌生,对Python相对较新,我想知道是否有可能在Python中编写服务器(或者如果已经存在,那将更好),通过标准套接字(UDP)接收数据并通过web套接字转发该数据到浏览器?我注意到在使用Tornado时,main的最后一行通常是:
tornado.ioloop.IOLoop.instance().start()
这会创建一个"监听器"循环,似乎会阻止我在标准套接字上接收任何数据。这可能吗?
Tornado没有任何用于处理UDP的显式api,但您可以使用IOLoop.add_handler
添加UDP套接字(以下代码未经测试,但应该会给您基本的想法):
def handle_udp(sock, events):
while True:
try:
data, addr = sock.recvfrom(bufsize)
# do stuff with data
except socket.error as e:
if e.errno in (errno.EAGAIN, errno.WOULDBLOCK):
# nothing more to read, return to the IOLoop
return
sock = bind_udp_socket()
sock.setblocking(0)
IOLoop.current().add_handler(sock, IOLoop.READ)
IOLoop.current().start()