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 ...
随机推荐
- Hadoop学习笔记1 - 使用Java API访问远程hdfs集群
转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...
- 新式类单例模式之 __new__()
单例模式: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类中有一个静态属性__instance,默认为none,重构__new__()方法,判断__instance是否为空,若为 ...
- 蓝桥每周一题之1. 3n+1 问题
[问题描述] 考虑如下的序列生成算法:从整数 n 开始,如果 n 是偶数,把它除以 2:如果 n 是奇数,把它乘 3 加1.用新得到的值重复上述步骤,直到 n = 1 时停止.例如,n = 22 时该 ...
- 自动化测试_Mac安装python+selenium
1.下载安装(参照下文) https://blog.csdn.net/kacylining/article/details/60587484 https://www.zhihu.com/questio ...
- 【步步为营 Entity Framework+Reporting service开发】-(2) Code Fir
也许有人问,为什么要用EF创建爱你数据表,code first好处是什么? 使用EF创建数据库/表,只需要设计简单的C#类,再表内容变化的时候他会自动更新数据库结构,并且保留原有数据. EF很强大,支 ...
- 天融信防火墙NGFW4000,无法进入web管理和community属性查看
1.system config save //配置保存 2.system config reset //清除配置(恢复出厂设置) 3.pf service add name webui area a ...
- React 组件间通信介绍
React 组件间通信方式简介 React 组件间通信主要分为以下四种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面对这四种情况分别进行介绍: 父组件向子 ...
- Java_04循环结构
1.while 循环结构 格式: while(循环条件){ } 关键字 while 后的小括号中的内容是循环条件.循环条件是一个表达式,值为布尔类型. { }大括号中的语句统称为循环操作,又称为循环体 ...
- MySQL Hardware--NUMA与MySQL
MUMA架构 在单实例的MySQL服务器上,通过会为MySQL的Buffer Pool分配50%至70%甚至更高的内存,让MySQL 服务会尽可能多地占用系统资源.在基于NUMA系统中,内存被分配到各 ...
- Metaclasses
1.Metaclasses Metaclasses是创建class(对象)的东西,它们是描述类的类,我们经常使用所理解的对象和class以及Metaclasses可以理解成以下形式: MyClass ...