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 多聊天室(返回消息给部分连接者)相关推荐

  1. Python用tornado的websocket开发聊天室

    Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...

  2. 基于django channel 实现websocket的聊天室

    websocket ​ 网易聊天室? ​ web微信? ​ 直播? 假如你工作以后,你的老板让你来开发一个内部的微信程序,你需要怎么办?我们先来分析一下里面的技术难点 消息的实时性? 实现群聊 现在有 ...

  3. 视频教程-基于Java的WebSocket的聊天室-Java

    基于Java的WebSocket的聊天室 多年 Java 企业级应用开发工作经验,曾参与中国人寿.华夏人寿.泰康人寿.信达财险等保险行业内部业务管理系统以及线上在线产品的开发:参与中国人民银行.清华大 ...

  4. 基于WebSocket实现聊天室(Node)

    基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...

  5. java开发websocket聊天室_java实现基于websocket的聊天室

    [实例简介] java实现基于websocket的聊天室 [实例截图] [核心代码] chatMavenWebapp └── chat Maven Webapp ├── pom.xml ├── src ...

  6. springboot 使用 Spring Boot WebSocket 创建聊天室 2-11

    什么是 WebSocket WebSocket 协议是基于 TCP 的一种网络协议,它实现了浏览器与服务器全双工(Full-duplex)通信-允许服务器主动发送信息给客户端. 以前,很多网站为了实现 ...

  7. C# 使用WebSocket创建聊天室

    WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服 ...

  8. C# 使用WebSocket创建聊天室案例

    WebSocket介绍 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服 ...

  9. Spring Boot使用websocket实现聊天室

    先看效果:这里面demo用的是原生js跟html,方便打包一体化,在效果上我更倾向于使用vue.react等进行页面开发 还有很多可以优化的点,目前的名字我直接使用的获取时间戳并且没有提供名字跟头像的 ...

最新文章

  1. java面试题34下面关于程序编译说法正确的是()
  2. 唯品会:在 Flink 容器化与平台化上的建设实践
  3. 广东科技学院计算机应用技术专业,广东科技学院是几本 [深圳大学应用技术学院计算机技术专业2018考研调剂信息]...
  4. java 抽象类 静态变量_Java基础之 接口、抽象类、构造方法、setXxx,getXxx、静态变量和成员变量、代码块、this和super的区别、final关键字、重写与重载...
  5. java json解析(转)
  6. 图着色问题(超详细!!!)
  7. 白帽SEO为什么更好?
  8. Maven 官网查找依赖包
  9. thinkphp整合单笔转账到支付宝账户文件配置
  10. C语言学习笔记——typedef
  11. Android App应用启动分析与优化
  12. 基于CAD的花灯制作
  13. EWM-产品批次创建函数
  14. 计算机应用基础18在线作业容,东师《计算机应用基础》18秋在线作业2.doc
  15. 前端实现base64格式文件的下载
  16. 人工智能之数学基础篇—高等数学基础(下篇)
  17. 车牌识别系统不能连接服务器,车牌识别系统常见问题及其解决方法
  18. AI模型大杀器----Amazon SageMaker 实现高精度猫狗分类
  19. E-day0004:annotate
  20. 流媒体的几种常见传输方式

热门文章

  1. 国内知名 IT 公司前端团队
  2. 【Android】4.3 屏幕布局和旋转
  3. InnoDB memcached插件部署
  4. Python descriptor
  5. 浅谈千万级PV/IP规模高性能高并发网站架构
  6. WordCount案例
  7. 【超详细】DBCP连接池配置参数说明
  8. Anaconda安装包报错——UnavailableInvalidChannel: The channel is not accessible or is invalid
  9. [git]一个本地仓库,多个远程仓库
  10. servlet 校验密码