好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python学习第二十七课(网页聊天)

一、前言 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学习第二十七课(网页聊天)的详细内容...

  阅读:32次