请求上下文流程图

群聊html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p><input type="text" id="nickname">
<button onclick="create_conn()">登录聊天室</button>
</p>
<p><input type="text" id="content">
<button onclick="send_msg()">发送消息</button>
</p>
<div id="message" style="width: 300px; border:2px solid red;"> </div> </body>
<script type="text/javascript">
var ws = null;
var nickname = null; function create_conn() {
nickname = document.getElementById("nickname").value;
ws = new WebSocket("ws://192.168.15.108:9527/ws/" + nickname);
ws.onopen = function () {
alert("欢迎登陆九聊");
};
ws.onmessage = function (data) {
var ws_msg = JSON.parse(data.data);
create_chat(ws_msg);
};
} function create_chat(text, self) {
var ptag = document.createElement("p");
if (self == "w") {
ptag.style.cssText = "text-align: right";
ptag.innerText = text.msg + ":" + text.sender;
} else {
ptag.style.cssText = "text-align: left";
ptag.innerText = text.sender + ":" + text.msg;
} document.getElementById("message").appendChild(ptag);
} function send_msg() {
var msg = document.getElementById("content").value;
// msg_json = JSON.stringify({"to_user":"","msg":msg});
ws.send(msg_json); create_chat({sender:nickname,msg:msg}, "w");
}; </script>
</html>

群聊flask代码

from flask import Flask, request,render_template
from geventwebsocket.websocket import WebSocket
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
import json app = Flask(__name__) user_socket_list = []
user_socket_dict = {} @app.route("/index")
def index():
return render_template("ws.html") @app.route("/ws/<nickname>")
def ws(nickname):
user_socket = request.environ.get("wsgi.websocket") # type: WebSocket
# user_ip = request.environ.get("")
print(nickname,":",request.environ.get("REMOTE_ADDR")) if user_socket:
user_socket_dict[nickname] = user_socket print(len(user_socket_dict), user_socket_dict)
while 1:
msg = user_socket.receive()
send_str = {"sender":nickname,"msg":msg}
for nname,usocket in user_socket_dict.items():
if usocket != user_socket:
try:
usocket.send(json.dumps(send_str))
except:
user_socket_dict.pop(nname) # http://127.0.0.1:9527/ws
# websocket://127.0.0.1:9527/ws if __name__ == '__main__':
# app.run("0.0.0.0",9527,debug=True) http_serv = WSGIServer(("0.0.0.0", 9527), app, handler_class=WebSocketHandler) http_serv.serve_forever()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p><input type="text" id="nickname">
<button onclick="create_conn()">登录聊天室</button>
</p>
<p>给<input type="text" id="who">
发送<input type="text" id="content">
<button onclick="send_msg()">发送消息</button>
</p>
<div id="message" style="width: 300px; border:2px solid red;"> </div> </body>
<script type="text/javascript">
var ws = null;
var nickname = null; function create_conn() {
nickname = document.getElementById("nickname").value;
ws = new WebSocket("ws://127.0.0.1:9527/ws/" + nickname);
ws.onopen = function () {
alert("欢迎登陆九聊");
};
ws.onmessage = function (data) {
var ws_msg = JSON.parse(data.data);
console.log(ws_msg);
create_chat(ws_msg);
};
} function create_chat(text, self) {
var ptag = document.createElement("p");
if (self == "w") {
ptag.style.cssText = "text-align: right";
ptag.innerText = text.msg + ":" + text.sender;
} else {
ptag.style.cssText = "text-align: left";
ptag.innerText = text.sender + ":" + text.msg;
}
document.getElementById("message").appendChild(ptag);
} function send_msg() {
var msg_str = document.getElementById("content").value;
var who = document.getElementById("who").value;
msg_json = JSON.stringify({"to_user":who,"msg":msg_str});
ws.send(msg_json); create_chat({sender:nickname,msg:msg_str}, "w");
}; </script>
</html>

私聊html

from flask import Flask, request, render_template
from geventwebsocket.websocket import WebSocket
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
import json app = Flask(__name__) user_socket_list = []
user_socket_dict = {} @app.route("/index")
def index():
return render_template("ws.html") @app.route("/ws/<nickname>")
def ws(nickname):
user_socket = request.environ.get("wsgi.websocket") # type: WebSocket
# user_ip = request.environ.get("")
print(nickname, ":", request.environ.get("REMOTE_ADDR")) if user_socket:
user_socket_dict[nickname] = user_socket print(len(user_socket_dict), user_socket_dict)
while 1:
msg = user_socket.receive()
msg_dict = json.loads(msg)
print(msg_dict)
# {msg : "FUCK" ,to_user:yinwangba}
# send_str = {"sender": nickname, "msg": msg} # msg[to_user] = teacher
usocket = user_socket_dict[msg_dict.get("to_user")]
send_msg = json.dumps({"sender": nickname, "msg": msg_dict.get("msg")})
usocket.send(send_msg)
# dj = {sender:nickname,msg:"FUCK"}
# usocket.send(dj)
#----------------------------web端----------------------
# {from_user:nickname,msg:"FUCK"}
####### {msg : "FUCK" ,to_user:yinwangba} ######
# {msg : "FUCK too" ,to_user:nickname} # http://127.0.0.1:9527/ws
# websocket://127.0.0.1:9527/ws if __name__ == '__main__':
# app.run("0.0.0.0",9527,debug=True)
print('hhh')
http_serv = WSGIServer(("127.0.0.1", 9527), app, handler_class=WebSocketHandler) http_serv.serve_forever()

私聊flask

Flask请求上下文源码讲解,简单的群聊单聊web的更多相关文章

  1. Flask(4)- flask请求上下文源码解读、http聊天室单聊/群聊(基于gevent-websocket)

    一.flask请求上下文源码解读 通过上篇源码分析,我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__call__方法返回了app的wsgi_app(en ...

  2. flask 请求上下文源码(转)

    本篇阅读目录 一.flask请求上下文源码解读 二.http聊天室(单聊/群聊)- 基于gevent-websocket 回到顶部 转:https://www.cnblogs.com/li-li/p/ ...

  3. flask请求上下文源码分析

    一.什么是上下文 每一段程序都有很多外部变量,只有像add这种简单的函数才是没有外部变量的,一旦你的一段程序有了外部变量,这段程序就不完整了,不能独立运行,你为了使他们能运行,就要给所有的外部变量一个 ...

  4. flask的请求上下文源码解读

    一.flask请求上下文源码解读 通过上篇源码分析( ---Flask中的CBV和上下文管理--- ),我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__ ...

  5. Flask系列10-- Flask请求上下文源码分析

    总览 一.基础准备. 1. local类 对于一个类,实例化得到它的对象后,如果开启多个线程对它的属性进行操作,会发现数据时不安全的 import time from threading import ...

  6. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  7. Flask的上下文源码剖析

    先写一段Flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

  8. Flask请求和应用上下文源码分析

      flask的request和session设置方式比较新颖,如果没有这种方式,那么就只能通过参数的传递. flask是如何做的呢? 1:本地线程,保证即使是多个线程,自己的值也是互相隔离 1 im ...

  9. Flask之 请求,应用 上下文源码解析

    什么是上下文? 每一段程序都有很多外部变量.只有像Add这种简单的函数才是没有外部变量的.一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行.你为了使他们运行,就要给所有的外部变量一个一个写 ...

随机推荐

  1. 小程序 mcrypt加密拓展在php7.1 废弃 使用openssl替代方案

    原加密方法 使用mcrypt //获得16位随机字符串,填充到明文之前 $random = $this->getRandomStr(); $text = $random . pack(" ...

  2. 2、java语言基础

    1.关键字 被Java语言赋予特定含义的单词被称为关键字关键字都是小写的在Java开发工具中,针对关键字有特殊颜色的标记 2.标识符 Java标识符命名规则 ·标识符是由,数字,字母,下划线和美元符号 ...

  3. 伪ajax操作

    什么是伪Ajax操作? 说白了就是假的ajax操作,但是它和正常的ajax操作的目的是一样的,把前端的信息发送到后台 先看一下代码吧! ajax.html <form action=" ...

  4. 【译】第四篇 SQL Server代理配置数据库邮件

    本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...

  5. 简单响应式Bootstrap框架中文官网页面模板

    链接:http://pan.baidu.com/s/1o7MQ6RC 密码:kee5

  6. 【shell】shell编程(五)-读取参数

    通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...

  7. 架构师必须搞懂DNS【转】

    DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源可以通过IP的形式访问,但IP地址比较难记,也不方便读 ...

  8. 64.Minimum Path Sum---dp

    题目链接:https://leetcode.com/problems/minimum-path-sum/description/ 题目大意:从左上到右下的路径中,找出路径和最小的路径(与62,63题相 ...

  9. [转载]FFmpeg完美入门[3] - FFmpeg功能及使用说明

    1 ffplay对多媒体的支持能力验证 一.视频3gp 177X144 支持播放,在windows下播放正常,但是在linux下面偶有BUG 如果发现画面无法显示而声音可以播放的情况下可以试着切换全屏 ...

  10. 服务器Java环境配置

    /* 当要在服务器里搭建Java web项目时, 要先配置好Java需要的环境 */ //jdk [root@localhost ~]# cd /usr/local/src [root@localho ...