一、前言 tornado简单而又强大,是学习他的原因,初学者容易接受。 网页聊天,很久之前称为聊天室。第一代互联网公司都做过这样的产品。例如:二十年前的网页聊天室,新浪的uc聊天室。最后存活下来了qq。现在有了微信,基本取代了之前的电话和短信。视频更强大,让相隔千里的人身临其境。想想二十年前,相隔千里的男女朋友,把诺基亚手机的T9输入法玩的炉火纯青,一分钟发送好几条短信,几百字,现在也是神话了。
二、websocket长连接 起初,聊天就是娱乐,管他收到收不到,陌生人聊聊而已,而且大多是广播,大家都能看到,所以用udp协议,例如qq,早期就用udp协议。后来为了保证信息传递的可靠性可达性,使用心跳的方式。却被国家某些主管部门批评说占用了信道带宽,这不是聊天工具的错,是某些部门某些领导推卸责任的接口。 而今,聊天信息非常重要,产生了长连接技术,websocket。
三、webSocketHandler tornado使用WebSocketHandler实现了websocket长连接,用起来特别好用。websockethandler有三个基本的事件。open:有客户端连接接入。on_close:有人退出。on_message:接收消息。
class ChatSocketHandler(tornado.websocket.WebSocketHandler): waiters = set() cache = [] cache_size = 200 def open(self): ChatSocketHandler.waiters.add(self) def on_close(self): ChatSocketHandler.waiters.remove(self) def on_message(self, message): logging.info("got message %r", message) #这里采用广播方式,每个进入聊天室的人,都能看到b别人发的信息。 for st in ChatSocketHandler.waiters: st.write_message(message) class Application(tornado.web.Application): def __init__(self): # 这里是路由。 handlers = [ # 注意这里,实现l聊天用的长链接服务。 (r"/chat", ChatSocketHandler)] super(Application, self).__init__(handlers, **settings) def main(): tornado.options.parse_command_line() app = Application() app.listen(8888) tornado.ioloop.IOLoop.current().start() if __name__ == "__main__": main()
上面的代码是服务端,再写一下前段页面,就可以通信了。
var updater = { socket: null, start: function() { var url = "ws://" + location.host + "/chat"; updater.socket = new WebSocket(url); updater.socket.onmessage = function(event) { updater.showMessage(JSON.parse(event.data)); } }, showMessage: function(message) { var existing = $("#m" + message.id); if (existing.length > 0) return; var node = $(message.html); node.hide(); $("#inbox").append(node); node.slideDown(); } };
后台代码,前端代码,聊天室这样可以建立了。如果没看懂,一起学习吧!
查看更多关于Python学习第二十七课(网页聊天)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did163020