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绑定
目前很多学习资料这样解释赋值与绑定,当是一个简单变量时,是赋值,当是复合变量时,是绑定. 注:赋值是重新复制变量到新变量中,赋值前后两个变量之间无联系.例C语言中: int a=6: int b: b ...
- python 读取默认配置文件和用户配置文件 configs
优先从configs_default中读取配置,但是configs_override中的配置可以override它 import configs_default #import configs_ove ...
- where 常用条件范例
where() public method Sets the WHERE part of the query. The method requires a $condition parameter, ...
- snprintf笔记
在weibo上看到Laruence大神修复了一个使用snprintf的bug (http://t.cn/Rm6AuFh) 引起了TK教主的关注.TK教主着重提到了在windows下snprintf与_ ...
- Unity备份占时留用
Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- EmptyBeanUtil
package com.rscode.credits.util; import java.util.List; /** * * 判断实体是否为空 * @author tn * */ public cl ...
- 计算机网络实验 UDP套接字编程
这是个傻瓜式操作教程 西科大计算机网络实验 UDP套接字编程 我用自己的Ubuntu16.04来举例,实验室的是虚拟机,差不多 只针对第三个题目,修改服务器来通过响应客户端发送的GetTime并发送给 ...
- 18.python关于mysql的api
一.pymysql模块1.pymysql是Python中操作MySQL的模块2.执行sql语句(1)连接数据库: import pymysql #连接mysql数据库创建conn对象(host连接的机 ...
- 使用 whereis/which/locate 查找文件
whereis命令 whereis只能用于搜索可执行文件 (-b) , 联机帮助文件 (-m) 和源代码文件 (-s) . 它只在一个数据库中查询(/var/lib/mlocate) . 这个数据库是 ...
- centos tree 命令
ftp://mama.indstate.edu/linux/tree/ download & make