跳到主要内容

Tornado框架中如何编写WebSocket程序?

参考答案:

Tornado是一个Python的可扩展的Web服务器和异步网络库,它原生支持WebSocket协议。以下是一个使用Tornado编写的基本WebSocket服务器的示例:

import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler(tornado.websocket.WebSocketHandler):

    async def on_message(self, message):
        await self.write_message(u"You said: " + message)

    async def on_close(self):
        print("WebSocket closed, connection count:", len(self.application.connections))


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("template.html")


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
        (r"/websocket", WebSocketHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在这个例子中,WebSocketHandler类负责处理WebSocket连接。on_message方法会在收到客户端的消息时被调用,on_close方法会在WebSocket连接关闭时被调用。

on_message方法接收一个参数,即客户端发送的消息的内容。在这个例子中,服务器会将接收到的消息原样返回给客户端。

on_close方法打印了当前活动连接的数量。

MainHandler类是一个普通的HTTP请求处理器,用于提供一个HTML模板,这个模板中包含一个连接到WebSocket服务器的JavaScript客户端。

这个例子中的WebSocket服务器监听在8888端口。你可以通过运行python your_script.py来启动它,然后在浏览器中打开http://localhost:8888/来连接到服务器。

你需要在你的HTML模板中添加JavaScript代码来建立WebSocket连接并发送/接收消息。这通常会使用WebSocket对象的opensendonmessageonerror,和onclose方法。

注意:这是一个非常基础的WebSocket服务器示例,实际使用中你可能需要添加更多的错误处理,以及更复杂的消息处理逻辑。