gevent-websocket初识
初试
from flask import Flask, request
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer app = Flask(__name__)
@app.route('/')
def index():
user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
try:
while True:
msg = user_socket.receive()
if msg == "quit":
return ''
print(msg)
user_socket.send(json.dumps({"msg": msg}))
except WebSocketError as e:
print(e)
return 'Finished'
if __name__ == '__main__':
http_server = WSGIServer(('0.0.0.0',5010), app, handler_class=WebSocketHandler)
http_server.serve_forever()
html部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
let ws = new WebSocket("ws://127.0.0.1:5010/");
ws.onmessage = function (data) {
let msg = JSON.parse(data.data);
console.log(msg)
}
</script>
</body>
</html>
结果
websocket群聊
from flask import Flask, request, render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.exceptions import WebSocketErrorimport json app = Flask(__name__) user_socket_list = [] @app.route('/')
def index():
return render_template('ws.html') @app.route('/chat')
def chat():
user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
user_socket_list.append(user_socket)
print(len(user_socket_list), user_socket_list)
try:
while True:
msg = user_socket.receive()
for socket in user_socket_list:
if socket != user_socket_list:
socket.send(json.dumps({"msg": msg})) # " 服务器信息: " +
except WebSocketError as e:
print(e)
user_socket_list.remove(user_socket)
return '' if __name__ == '__main__':
http_server = WSGIServer(('192.168.56.1', 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>Title</title>
</head>
<body>
<div class="container">
<div><p>发送消息:<input type="text" id="msg"><button onclick="send_msg()">发送</button></p></div>
<div id="chat" style="width: 500px; height: 500px"></div>
</div>
<script type="text/javascript">
let ws = new WebSocket("ws://192.168.56.1:5000/chat");
ws.onmessage = function (data) {
let msg = JSON.parse(data.data);
console.log(msg);
let ptage = document.createElement("p");
ptage.innerText = msg.msg;
document.getElementById("chat").appendChild(ptage);
};
function send_msg() {
let msg = document.getElementById("msg").value;
console.log(msg);
ws.send(msg);
}
</script>
</body>
</html>
websocket单聊
from flask import Flask, request, render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.exceptions import WebSocketError
import json app = Flask(__name__)
user_socket_dic = {} @app.route('/')
def index():
return render_template('pk.html') @app.route('/pk/<username>')
def pk(username):
user_socket = request.environ.get("wsgi.websocket") # type:WebSocket
user_socket_dic[username] = user_socket
print(len(user_socket_dic), user_socket_dic)
try:
while True:
msg = json.loads(user_socket.receive())
to_user = msg.get('to_user')
print(to_user)
if to_user:
to_msg = {"from_user":username, "msg": msg.get('msg')}
user_socket_dic.get(to_user).send(json.dumps(to_msg))
print(to_msg)
else:
user_socket.send("") except WebSocketError as e:
user_socket_list.remove(user_socket)
return ''
if __name__ == '__main__':
http_server = WSGIServer(('192.168.56.1', 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>Title</title>
</head>
<body>
<div class="container">
<div>
<p>登陆我的socket:<input type="text" id="username"><button onclick="open_ws()">连接</button></p>
<p>目标用户:<input type="text" id="to_user"></p>
<p>发送消息:<input type="text" id="msg"><button onclick="send_msg()">发送</button></p>
</div>
<div id="chat" style="width: 500px; height: 500px"></div>
</div> <script type="text/javascript">
let ws = null;
function open_ws() {
let username = document.getElementById("username").value;
ws = new WebSocket("ws://192.168.56.1:5000/pk/" + username);
ws.onmessage = function (data) {
let content = JSON.parse(data.data);
let ptage = document.createElement("p"); ptage.innerText = content.from_user + "," + content.msg;
document.getElementById("chat").appendChild(ptage);
};
} function send_msg() {
let msg = document.getElementById("msg").value;
let to_user = document.getElementById("to_user").value;
let data = {to_user:to_user, msg:msg};
ws.send(JSON.stringify(data));
}
</script> </body>
</html>
gevent-websocket初识的更多相关文章
- websocket初识
一.官网 官网地址:http://www.websocket.org/ 二.websocket初识demo <input id="sendTxt" type="te ...
- websocket 初识
websocket 初识 前言 其实很早就知道了 websocket 这个概念了,像现在大火的直播等使用的就是 websocket.之前找爬虫工作,对面问我爬过 websocket 网站没,很汗颜,那 ...
- 【HTML5】websocket 初识
什么是WebSocket API? WebSocket API是下一代客户端-服务器的异步通信方法.该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序.WebSock ...
- 习WebSocket一(WebSocket初识)[转]
http://www.cnblogs.com/wgp13x/p/3812579.html Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tom ...
- 学习WebSocket一(WebSocket初识)
Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都 ...
- Html和websocket初识
一.web框架 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def handle_request(c ...
- nginx+flask+gevent+uwsgi实现websocket
Websocket简介 WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务 ...
- 一步一步学WebSocket (一) 初识WebSocket
众所周知,Http协议是无状态的,并且是基于Request/Response的方式与服务器进行交互,也就是我们常说的单工模式.但是随着互联网的发展,浏览器与服务端进行双向通信需求的增加,长轮询向服务器 ...
- 初识WebSocket
众所周知,Http协议是无状态的,并且是基于Request/Response的方式与服务器进行交互,也就是我们常说的单工模式.但是随着互联 网的发展,浏览器与服务端进行双向通信需求的增加,长轮询向服务 ...
- 初识WebSocket协议
1.什么是WebSocket协议 RFC6455文档的表述如下: The WebSocket Protocol enables two-way communication between a clie ...
随机推荐
- python常量 变量 数据类型 注释 交互 if语句
1.认识python python的创始人吉多·范罗苏姆(Guido van Rossum )龟叔在89年圣诞节开始开发python python属于解释型语言,强类型定义语言. 编译型/解释型:编译 ...
- yii2.0 curd操作
$customer=new Customer();//插入操作 $customer->name='小熊'; $customer->save(); //修改操作 $model=Custome ...
- 常用的CMD & Linux命令
[CMD命令] 1.分行输入环境变量 使用echo %PATH%输出环境变量的时候没有分行输出,看起来十分麻烦: 通过xargs命令可以实现分行输出,命令如下: echo %PATH% | xargs ...
- 用matlab画漂亮的sin曲线
Technorati 标记: matlab,plot 相信大部分用过matlab的人都画过sin曲线,直接plot就可以了,不过呢,plot出来的曲线自然不那么好看,本着绳命在于折腾的原则,小弟学习了 ...
- CSS学习笔记_day1
目录 一. 什么是HTML 二.编辑器 三.Html的基本骨架 四.html基本标签 h.p.img.a.audio.video.ul>li.ol>li.dl dd dt.span.div ...
- SQL动态长度行列转置
一,案列问题描述: 某销售系统中,注册的用户会在随后的月份中购物下单,需要按月统计注册的用户中各个月下单的金额.源数据表如下: FM::注册月份,CM: 下单月份, AMT:下单金额 期望得到如下统计 ...
- vue学习之路一:安装vue-element-admin项目
今天看到一个vue网站,觉得很好,立马又有学习vue的冲动了,话不多说,直接贴项目网址: https://github.com/PanJiaChen/vue-element-admin/blob/ma ...
- 2018-2019-2 20165313 《网络对抗技术》Exp4 恶意代码分析
一.实践目标 1.监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...
- Ubuntu系统安装Transmission
虚拟机Ubuntu 16.10 Transmission 2.92(https://launchpad.net/~transmissionbt/+archive/ubuntu/ppa) 一.添加源 s ...
- Java泛型相关总结(下)
约束与局限性 不能用基本类型实例化类型参数 不能像Pair<double>这样调用,只能Pair<Double>,原因是类型擦除 运行时类型查询只使用于原始类型 虚拟机中的对象 ...