一、前言 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