tornado的websocket的聊天

今天看了python tornado的websocket,跑起来了,不理想。cookie不支持,先运行看下效果

在这里插入图片描述在这里插入图片描述

# 引入需要的模块
# import tornado.web
# import tornado.ioloop
import tornado.options
import tornado.autoreload
from tornado.options import define, options


from tornado.web import RequestHandler,Application
from tornado.httpserver import HTTPServer
from tornado.websocket import WebSocketHandler
from tornado.ioloop import IOLoop

class BaseHandler(RequestHandler):
    pass

# 定义首页视图处理类,提示用户登录
class IndexHandler(BaseHandler):
    def get(self):
        self.render('index.html')

# 定义登录视图处理类
class LoginHandler(BaseHandler):
    def get(self):
        # 获取用户登录的昵称
        # nickname=self.get_argument('nickname')
        # 将用户登录的昵称保存在cookie中,安全cookie
        # self.set_secure_cookie('nickname',nickname,expires_days=None)
        nickname = 'abce'
        self.render('chat.html',nickname=nickname)


# 定义接收/发送聊天消息的视图处理类,继承自websocket的WebSocketHandler
class ChatHandler(WebSocketHandler):
    # 定义一个集合,用来保存在线的所有用户
    online_users = set()
    # 从客户端获取cookie信息


    # 重写open方法,当有新的聊天用户进入的时候自动触发该函数
    def open(self):
        # 当有新的用户上线,将该用户加入集合中
        self.online_users.add(self)
        # 将新用户加入的信息发送给所有的在线用户
        for user in self.online_users:
            user.write_message('【%s】进入了聊天室' % self.request.remote_ip)

    # 重写on_message方法,当聊天消息有更新时自动触发的函数
    def on_message(self, message):
        # 将在线用户发送的消息通过服务器转发给所有的在线用户
        for user in self.online_users:
            user.write_message('%s:%s' % (self.request.remote_ip, message))

    # 重写on_close方法,当有用户离开时自动触发的函数
    def on_close(self):
        # 先将用户从列表中移除
        self.online_users.remove(self)
        # 将该用户离开的消息发送给所有在线的用户
        for user in self.online_users:
            user.write_message('【%s】离开了聊天室~' % self.request.remote_ip)

    def check_origin(self, origin):
        return  True
settings = {'debug' : True}
define("debug",default=True,help="Debug Mode",type=bool)
if __name__ == '__main__':
    tornado.options.parse_command_line()
    #创建一个应用对象
    app = tornado.web.Application([(r'/',IndexHandler)],**settings)

    app = tornado.web.Application(
        [
            (r"/", IndexHandler),
            (r"/login", LoginHandler),
            (r"/chat", ChatHandler)
        ],**settings
    )
    #绑定一个监听端口
    app.listen(5020)
    #启动web程序,开始监听端口的连接
    tornado.ioloop.IOLoop.current().start()
发布了62 篇原创文章 · 获赞 11 · 访问量 8095

猜你喜欢

转载自blog.csdn.net/u013252962/article/details/100562751