webScoket技术
后台Python代码
#!/usr/bin/python3
# *-* coding:utf-8 *-*
import random
import time
from tornado.websocket import WebSocketHandler
from tornado.web import RequestHandler
class RobbitHandler(RequestHandler):
def get(self):
""""""
self.render('message/robbit.html')
class MessageOldHandler(WebSocketHandler):
"""单人对话"""
def open(self):
""""""
# 表示客户请求连接
print(self.request)
ip = self.request.remote_ip
# 向客户端发送消息
self.write_message('你好,%s' % ip)
self.write_message('starting')
for i in range(10):
time.sleep(1)
number = random.randint(0, 500)
self.write_message(str(number))
self.write_message('end')
class MessageHandler(WebSocketHandler):
"""多人对话"""
# 当前处理器是一个长连接
online_clients = []
print('sss')
def send_all(self, msg):
""""""
for client in self.online_clients:
# 向客户端发送消息
client.write_message(msg)
def open(self):
""""""
# 表示客户请求连接
# ip = self.request.remote_ip
print(self.get_secure_cookie('username').decode('utf8'))
self.online_clients.append(self)
username = self.get_secure_cookie('username').decode('utf8')
self.send_all('%s进入了聊天室' % username)
def on_message(self, message):
""""""
# ip = self.request.remote_ip
username = self.get_secure_cookie('username').decode('utf8')
self.send_all('%s说:%s' % (username, message))
def on_connection_close(self):
""""""
self.online_clients.remove(self)
前端页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>聊天室</title>
<style>
#message_body {
height: 400px;
background: lightgoldenrodyellow;
border: 1px solid #1cb7fd;
overflow-y: auto;
}
</style>
</head>
<body>
<h1>聊天室</h1>
<div id="message_body">
</div>
<div>
<input type="text" id="msg"><br>
<button type="button" id="sendBtn">发送</button>
</div>
<script>
function $(id) {
return document.getElementById(id)
}
window.onload = function () {
let socket = new WebSocket('ws://localhost:8000/message')
// 设置打开socket连接的回调函数
socket.onopen = function (ev2) {
console.log('====open===')
console.log(ev2)
}
let numberIsStarted = false;
// 接收服务端发送的消息的回调函数
socket.onmessage = function (ev2) {
console.log('====msg===')
console.log(ev2)
let data = ev2.data
$('message_body').innerText += data + "\n"
}
// 接收到错误信息的回调函数
socket.onerror = function (ev2) {
console.log('====err===')
console.log(ev2)
}
// 发送数据
$('sendBtn').addEventListener('click', function (e) {
let msg = $('msg').value
console.log(msg)
socket.send(msg); // 向服务端发送消息
})
}
</script>
</body>
</html>
本文来自博客园,作者:ALin_Da,转载请注明原文链接:https://www.cnblogs.com/alinda/p/16517304.html
。 一个programmer小菜鸟的成长记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)