tornado websocket聊天室
2024-10-19 19:44:35
1.app.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import uuid
import json
import tornado.ioloop
import tornado.web
import tornado.websocket class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html') class ChatHandler(tornado.websocket.WebSocketHandler):
# 用户存储当前聊天室用户
waiters = set()
# 用于存储历时消息
messages = [] def open(self):
"""
客户端连接成功时,自动执行
:return:
"""
ChatHandler.waiters.add(self)
uid = str(uuid.uuid4())
self.write_message(uid) for msg in ChatHandler.messages:
content = self.render_string('message.html', **msg)
self.write_message(content) def on_message(self, message):
"""
客户端连发送消息时,自动执行
:param message:
:return:
"""
msg = json.loads(message)
ChatHandler.messages.append(msg) for client in ChatHandler.waiters:
content = client.render_string('message.html', **msg)
client.write_message(content) def on_close(self):
"""
客户端关闭连接时,,自动执行
:return:
"""
ChatHandler.waiters.remove(self) def run():
settings = {
'template_path': 'templates',
'static_path': 'static',
}
application = tornado.web.Application([
(r"/", IndexHandler),
(r"/chat", ChatHandler),
], **settings)
application.listen(8888,address='0.0.0.0')
tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__":
run()
2.message.html
<div style="border: 1px solid #dddddd;margin: 10px;">
<div>游客{{uid}}</div>
<div style="margin-left: 20px;">{{message}}</div>
</div>
3.index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Python聊天室</title>
</head>
<body>
<div>
<input type="text" id="txt"/>
<input type="button" id="btn" value="提交" onclick="sendMsg();"/>
<input type="button" id="close" value="关闭连接" onclick="closeConn();"/>
</div>
<div id="container" style="border: 1px solid #dddddd;margin: 20px;min-height: 500px;"> </div> <script src="/static/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(function () {
wsUpdater.start();
}); var wsUpdater = {
socket: null,
uid: null,
start: function() {
var url = "ws://192.168.20.200:8888/chat";
wsUpdater.socket = new WebSocket(url);
wsUpdater.socket.onmessage = function(event) { if(wsUpdater.uid){
wsUpdater.showMessage(event.data);
}else{
wsUpdater.uid = event.data;
}
}
},
showMessage: function(content) {
$('#container').append(content);
}
}; function sendMsg() {
var msg = {
uid: wsUpdater.uid,
message: $("#txt").val()
};
wsUpdater.socket.send(JSON.stringify(msg));
} </script> </body>
</html>
4.引入jQuery
最新文章
- Hadoop基础思维导图
- 【夯实PHP基础系列】JQuery easyUI的使用
- ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)
- Excel 如何引用某表格中的某一列作为数据有效性验证
- 最近面试遇到的Windows相关的题目
- grunt 构建工具(build tool)初体验
- [iOS 开发]UITableView第一行显示不完全
- [转] 关于UIView
- Windows下安装storm-0.9.1
- ZOJ 3331 Process the Tasks 双塔Dp
- JPush极光推送 Java调用服务器端API开发
- SQL SERVER 查看日志大小及日志已满的处理方法 (转)
- Android 跳转权限设置界面的终极方案
- 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)
- 史上最全最详细的环境搭建教程,行百里者手把手教你在windows下搭建Anaconda+pycharm+库文件(TensorFlow,numpy)环境搭建
- MQTT压力测试工具之JMeter插件教程
- virtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法
- 20135234mqy 实验四
- Eclipse上传代码到GitHub
- url传参错误的痛
热门文章
- ORACLE EHCC(exadata hybrid columnar compression)
- .NET编码解码(HtmlEncode与HtmlDecode)
- 饮冰三年-人工智能-linux-05 Linux进程
- openstack 网络更改版
- OOP和面向对象
- 修改Tomcat默认连接数
- FATAL Fatal error during KafkaServerStable startup. Prepare to shutdown (kafka.server.KafkaServerStartable) java.io.FileNotFoundException: /tmp/kafka-logs/.lock (Permission denied)
- Exception in thread ";main"; java.lang.NullPointerException
- 前端面试题集锦及答案解析--HTML、 HTTP、web综合问题
- Socket.Io+HttpWebRequest 请求Api