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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值