tornado中websocket聊天:
后端:
# websocket聊天
from tornado.websocket import WebSocketHandler
class HomeChatHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.render("home.html")
class ChatHandler(WebSocketHandler):
users = []
# 当websocket打开时调用
def open(self):
print("##########")
self.users.append(self)
# print(self.users)
for user in self.users:
# print(user)
# print(self.request.remote_ip)
# 给客户端发消息
user.write_message("[%s]登录了!!!" % (self.request.remote_ip))
# 当客户端发送消息调用
def on_message(self, message):
for user in self.users:
# print(user)
# print(self.request.remote_ip)
# 给客户端发消息
user.write_message(u"[%s]说了:%s" % (self.request.remote_ip, message))
# 当websocket关闭时调用
def on_close(self):
self.users.remove(self)
for user in self.users:
# print(user)
# print(self.request.remote_ip)
# 给客户端发消息
user.write_message(u"[%s]退出了!!!" % (self.request.remote_ip))
# # 判断源origin,对于符合条件的允许源连接
# def check_origin(self, origin):
# pass
# 关闭websocket
# def clear(self):
# pass
前端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>聊天界面</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-3.3.1.min.js" charset="UTF-8"></script>
</head>
<body>
<div id="contents" style="width: 500px;height: 500px;overflow: auto">
</div>
<div>
<input type="text" id="message">
<button onclick="sendMessage()">发送</button>
</div>
</body>
<script>
//建立websocket连接
var ws = new WebSocket("ws://192.168.0.155:11121/chat")
#接受服务器的消息
ws.onmessage = function (e) {
$("#contents").append("<p>" + e.data + "</p>")
}
#向服务器发消息
function sendMessage() {
var message = $("#message").val()
ws.send(message)
$("#message").val("")
}
</script>
</html>