对于Web套接字完全陌生并且相对较新的Python,我想知道是否有可能在Python中编写服务器(或者如果已经存在,那将更好),它通过标准套接字接收数据(UDP )并通过Web套接字将数据转发到浏览器?我注意到在使用Tornado时,主要的最后一行通常是:
tornado.ioloop.IOLoop.instance().start()
创造了一个"听众"循环,似乎阻止我在我的标准套接字上接收任何数据。有可能这样做吗?
答案 0 :(得分:1)
Tornado没有任何明确的API来处理UDP,但您可以添加一个带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()