<form action="" onsubmit="sendMessage(event)">
<input type="text" id="messageText" autocomplete="off" />
<button>发送</button>
</form>
<ul id="messages">
</ul>
<script>
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*-+"
let client_id = ""
for (let i = 0; i < 10; i++) {
const randomIndex = Math.floor(Math.random() * characters.length)
client_id += characters.charAt(randomIndex)
}
document.querySelector("#ws-id").textContent = client_id
var ws = new WebSocket(`ws://localhost:8080/ws/${client_id}`)
ws.onmessage = function(event) {
var messages = document.getElementById("messages")
var message = document.createElement("li")
var content = document.createTextNode(event.data)
message.appendChild(content)
messages.appendChild(message)
}
function sendMessage(event) {
var input = document.getElementById("messageText")
ws.send(input.value)
input.value = ""
event.preventDefault()
}
</script>
</body>
</html>
"""
# 将 HTML 返回给前端
( )@app.get "/"
get():async def
HTMLResponse(html)return
ConnectionManager:class
( ):def __init__ self
.active_connections: List[WebSocket] []self =
( , websocket: WebSocket):async def connect self
websocket.accept()await
.active_connections.append(websocket)self
disconnect( , websocket: WebSocket):def self
.active_connections.remove(websocket)self
send_personal_message( , message: , websocket: WebSocket):async def self str
websocket.send_text(message)await
broadcast( , message: ):async def self str
connection .active_connections:for in self
connection.send_text(message)await
manager ConnectionManager()=
( )@app.websocket "/ws/{client_id}"
websocket_endpoint(client_id: , websocket: WebSocket):async def str
manager. (websocket)await connect
manager.broadcast( client_id )await f"{ } 进入聊天室"
:try