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 ...
随机推荐
- css设置文字多余部分显示省略号
如果只显示一行,则可以使用以下方法: overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 如果需要显示多行,在需要设置的元素s ...
- 微信小程序 image属性 mode
mode属性可以改变图片的填充容器方式
- JS判断
/***************************************************************** 表单校验工具类 (linjq) ***************** ...
- mysql新增用户并开启远程连接
之前使用mysql一直使用root来连接登录数据库,现在想使用新的用户名来连接数据库,碰到数据连接不上的情况. 把这些记录下来,以备后用 1.首先,创建用户 CREATE USER 'xiazhenx ...
- 震惊!!!源程序特征统计程序——基于python getopt库
项目github地址:https://github.com/holidaysss/WC PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟 ...
- 安装pipenv
首先: 安装pipenv pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv 使用国内源安装pipenv 创建文件夹 mkd ...
- HyperLogLog算法
项目在统计UV/PV时用到了Druid的Hyper hyperunique算法,书上介绍这种算法求出的UV/PV存在一定误差,因此需要了解下误差来自哪里. 实现去重功能,最简单的就是使用set记录集合 ...
- 【论文笔记】Malware Detection with Deep Neural Network Using Process Behavior
[论文笔记]Malware Detection with Deep Neural Network Using Process Behavior 论文基本信息 会议: IEEE(2016 IEEE 40 ...
- git配置代理
1.查看当前代理 git config --global http.proxy 2.配置git走代理,可走http代理也可以走socks5代理,可根据自己的代理协议而定 #http代理 git con ...
- 前端导出csv
前端导出csv export: function(data, name) { // csv文件的BOM头 \ufeff可以让excel等识别出csv文件的编码 var uri = 'data:text ...