Python通过套接字接收数据并通过Web套接字转发

时间:2015-09-07 00:39:40

标签: python sockets websocket tornado

对于Web套接字完全陌生并且相对较新的Python,我想知道是否有可能在Python中编写服务器(或者如果已经存在,那将更好),它通过标准套接字接收数据(UDP )并通过Web套接字将数据转发到浏览器?我注意到在使用Tornado时,主要的最后一行通常是:

tornado.ioloop.IOLoop.instance().start()

创造了一个"听众"循环,似乎阻止我在我的标准套接字上接收任何数据。有可能这样做吗?

1 个答案:

答案 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()