python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)
1 #-*-coding:utf-8-*-
2 __author__ = 'zhouwang'
3 importjson4 importtornado.web5 importtornado.websocket6 importtornado.httpserver7 importtornado.ioloop8 importtornado.options9 from uuid importuuid410
11 classChatHome(object):12 '''
13 处理websocket 服务器与客户端交互14 '''
15 chatRegister ={}16
17 defregister(self, newer):18 '''
19 保存新加入的客户端连接、监听实例,并向聊天室其他成员发送消息!20 '''
21 home = str(newer.get_argument('n')) #获取所在聊天室
22 if home inself.chatRegister:23 self.chatRegister[home].append(newer)24 else:25 self.chatRegister[home] =[newer]26
27 message ={28 'from': 'sys',29 'message': '%s 加入聊天室(%s)' % (str(newer.get_argument('u')), home)30 }31 self.callbackTrigger(home, message)32
33 defunregister(self, lefter):34 '''
35 客户端关闭连接,删除聊天室内对应的客户端连接实例36 '''
37 home = str(lefter.get_argument('n'))38 self.chatRegister[home].remove(lefter)39 ifself.chatRegister[home]:40 message ={41 'from': 'sys',42 'message': '%s 离开聊天室(%s)' % (str(lefter.get_argument('u')), home)43 }44 self.callbackTrigger(home, message)45
46 defcallbackNews(self, sender, message):47 '''
48 处理客户端提交的消息,发送给对应聊天室内所有的客户端49 '''
50 home = str(sender.get_argument('n'))51 user = str(sender.get_argument('u'))52 message ={53 'from': user,54 'message': message55 }56 self.callbackTrigger(home, message)57
58 defcallbackTrigger(self, home, message):59 '''
60 消息触发器,将最新消息返回给对应聊天室的所有成员61 '''
62 for callbacker inself.chatRegister[home]:63 callbacker.write_message(json.dumps(message))64
65
66 classchatBasicHandler(tornado.web.RequestHandler):67 '''
68 主页, 选择进入聊天室69 '''
70 def get(self, *args, **kwargs):71 session = uuid4() #生成随机标识码,代替用户登录
72 self.render('chat/basic.html', session =session)73
74 classhomeHandler(tornado.web.RequestHandler):75 '''
76 聊天室, 获取主页选择聊天室跳转的get信息渲染页面77 '''
78 def get(self, *args, **kwargs):79 n = self.get_argument('n') #聊天室
80 u = self.get_argument('u') #用户
81 self.render('chat/home.html', n=n, u=u)82
83
84 classnewChatStatus(tornado.websocket.WebSocketHandler):85 '''
86 websocket, 记录客户端连接,删除客户端连接,接收最新消息87 '''
88 defopen(self):89 n = str(self.get_argument('n'))90 self.write_message(json.dumps({'from':'sys', 'message':'欢迎来到 聊天室(%s)' % n})) #向新加入用户发送首次消息
91 self.application.chathome.register(self) #记录客户端连接
92
93 defon_close(self):94 self.application.chathome.unregister(self) #删除客户端连接
95
96 defon_message(self, message):97 self.application.chathome.callbackNews(self, message) #处理客户端提交的最新消息
98
99
100 classApplication(tornado.web.Application):101 def __init__(self):102 self.chathome =ChatHome()103
104 handlers =[105 (r'/', chatBasicHandler),106 (r'/home/', homeHandler),107 (r'/newChatStatus/', newChatStatus),108 ]109
110 settings ={111 'template_path': 'html',112 'static_path': 'static'
113 }114
115 tornado.web.Application.__init__(self, handlers, **settings)116
117 if __name__ == '__main__':118 tornado.options.parse_command_line()119 server =tornado.httpserver.HTTPServer(Application())120 server.listen(8000)121 tornado.ioloop.IOLoop.instance().start()
python tornado websocket_python tornado websocket 多聊天室(返回消息给部分连接者)相关推荐
- Python用tornado的websocket开发聊天室
Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...
- 基于django channel 实现websocket的聊天室
websocket 网易聊天室? web微信? 直播? 假如你工作以后,你的老板让你来开发一个内部的微信程序,你需要怎么办?我们先来分析一下里面的技术难点 消息的实时性? 实现群聊 现在有 ...
- 视频教程-基于Java的WebSocket的聊天室-Java
基于Java的WebSocket的聊天室 多年 Java 企业级应用开发工作经验,曾参与中国人寿.华夏人寿.泰康人寿.信达财险等保险行业内部业务管理系统以及线上在线产品的开发:参与中国人民银行.清华大 ...
- 基于WebSocket实现聊天室(Node)
基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...
- java开发websocket聊天室_java实现基于websocket的聊天室
[实例简介] java实现基于websocket的聊天室 [实例截图] [核心代码] chatMavenWebapp └── chat Maven Webapp ├── pom.xml ├── src ...
- springboot 使用 Spring Boot WebSocket 创建聊天室 2-11
什么是 WebSocket WebSocket 协议是基于 TCP 的一种网络协议,它实现了浏览器与服务器全双工(Full-duplex)通信-允许服务器主动发送信息给客户端. 以前,很多网站为了实现 ...
- C# 使用WebSocket创建聊天室
WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服 ...
- C# 使用WebSocket创建聊天室案例
WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服 ...
- Spring Boot使用websocket实现聊天室
先看效果:这里面demo用的是原生js跟html,方便打包一体化,在效果上我更倾向于使用vue.react等进行页面开发 还有很多可以优化的点,目前的名字我直接使用的获取时间戳并且没有提供名字跟头像的 ...
最新文章
- java面试题34下面关于程序编译说法正确的是()
- 唯品会:在 Flink 容器化与平台化上的建设实践
- 广东科技学院计算机应用技术专业,广东科技学院是几本 [深圳大学应用技术学院计算机技术专业2018考研调剂信息]...
- java 抽象类 静态变量_Java基础之 接口、抽象类、构造方法、setXxx,getXxx、静态变量和成员变量、代码块、this和super的区别、final关键字、重写与重载...
- java json解析(转)
- 图着色问题(超详细!!!)
- 白帽SEO为什么更好?
- Maven 官网查找依赖包
- thinkphp整合单笔转账到支付宝账户文件配置
- C语言学习笔记——typedef
- Android App应用启动分析与优化
- 基于CAD的花灯制作
- EWM-产品批次创建函数
- 计算机应用基础18在线作业容,东师《计算机应用基础》18秋在线作业2.doc
- 前端实现base64格式文件的下载
- 人工智能之数学基础篇—高等数学基础(下篇)
- 车牌识别系统不能连接服务器,车牌识别系统常见问题及其解决方法
- AI模型大杀器----Amazon SageMaker 实现高精度猫狗分类
- E-day0004:annotate
- 流媒体的几种常见传输方式