分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

WebSocket 在烧瓶和龙卷风中的应用

发布时间:2023-09-06 01:54责任编辑:胡小海关键词:Web

a. 安装

 ???pip3 install gevent-websocket ????????作用: ???????- 处理Http、Websocket协议的请求 -> socket ????????- 封装Http、Websocket相关数据 ??-> request

b. 基本结构

 ???from geventwebsocket.handler import WebSocketHandler ???from gevent.pywsgi import WSGIServer ???????????@app.route('/test') ???def test(): ???????ws = request.environ.get('wsgi.websocket') ???????ws.receive() ???????ws.send(message) ???????ws.close() ???????return render_template('index.html') ???????????????????????if __name__ == '__main__': ???????http_server = WSGIServer(('0.0.0.0', 5000,), app, handler_class=WebSocketHandler) ???????http_server.serve_forever()

c. WEB聊天室:

 ???后端: ???????from geventwebsocket.handler import WebSocketHandler ???????from gevent.pywsgi import WSGIServer ???????from flask import Flask,render_template,request ???????import pickle ???????app = Flask(__name__) ???????app.secret_key = 'xfsdfqw' ???????@app.route('/index') ???????def index(): ???????????return render_template('index.html') ???????WS_LIST = [] ???????@app.route('/test') ???????def test(): ???????????ws = request.environ.get('wsgi.websocket') ???????????if not ws: ???????????????return '请使用WebSocket协议' ???????????# websocket连接已经成功 ???????????WS_LIST.append(ws) ???????????while True: ???????????????# 等待用户发送消息,并接受 ???????????????message = ws.receive() ???????????????# 关闭:message=None ???????????????if not message: ???????????????????WS_LIST.remove(ws) ???????????????????break ???????????????for item in WS_LIST: ???????????????????item.send(message) ???????????return "..." ???????if __name__ == '__main__': ???????????http_server = WSGIServer(('0.0.0.0', 5000,), app, handler_class=WebSocketHandler) ???????????http_server.serve_forever() ???????前端: ???????<!DOCTYPE html> ???????<html lang="zh-cn"> ???????<head> ???????????<meta charset="UTF-8"> ???????????<meta http-equiv="X-UA-Compatible" content="IE=edge"> ???????????<meta name="viewport" content="width=device-width, initial-scale=1"> ???????????<title>Title</title> ???????????<style> ???????????????.msg-item{ ???????????????????padding: 5px; ???????????????????border: 1px; ???????????????????margin: 0 5px; ???????????????} ???????????</style> ???????</head> ???????<body> ???????????<h1>首页</h1> ???????????<div> ???????????????<h2>发送消息</h2> ???????????????<input id="msg" type="text" ?/> <input type="button" value="发送" onclick="sendMsg()"> ???????????????<h2>接收消息</h2> ???????????????<div id="container"> ???????????????</div> ???????????</div> ???????????<script src="/static/jquery-3.3.1.min.js"></script> ???????????<script> ???????????????ws = new WebSocket('ws://192.168.12.42:5000/test'); ???????????????ws.onmessage = function (event) { ???????????????????var tag = document.createElement('div'); ???????????????????tag.className = 'msg-item'; ???????????????????tag.innerText = event.data; ???????????????????$('#container').append(tag); ???????????????} ???????????????function sendMsg() { ???????????????????ws.send($('#msg').val()); ???????????????} ???????????</script> ???????</body> ???????</html>

d. tornado.websocket示例

 ???????????import tornado ???????????from tornado.web import Application ???????????from tornado.web import RequestHandler ???????????from tornado.websocket import WebSocketHandler ???????????class IndexHandler(RequestHandler): ???????????????def get(self, *args, **kwargs): ???????????????????# self.write('Hello World') ???????????????????self.render('index.html') ???????????????def post(self, *args, **kwargs): ???????????????????user = self.get_argument('user') ???????????????????self.write('成功') ???????????WS_LIST = [] ???????????class MessageHandler(WebSocketHandler): ???????????????def open(self, *args, **kwargs): ???????????????????WS_LIST.append(self) ???????????????def on_message(self, message): ???????????????????for ws in WS_LIST: ???????????????????????ws.write_message(message) ???????????????def on_close(self): ???????????????????WS_LIST.remove(self) ???????????settings = { ???????????????'template_path':'templates', ???????????????'static_path':'static', ???????????} ???????????app = Application([ ???????????????(r"/index", IndexHandler), ???????????????(r"/message", MessageHandler), ???????????],**settings) ???????????if __name__ == '__main__': ???????????????app.listen(address='0.0.0.0',port=9999) ???????????????tornado.ioloop.IOLoop.instance().start()

WebSocket 在烧瓶和龙卷风中的应用

原文地址:https://www.cnblogs.com/iyouyue/p/9052913.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved