session

WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]

China☆狼群 提交于 2020-03-23 10:55:31
我们都知道,WCF支持Duplex的消息交换模式,它允许在service的执行过程中实现对client的回调。WCF这种双向通信的方式是我们可以以Event Broker或者订阅/发布的方式来定义和调用WCFService。今天我们就给大家一个具体的例子:通过WCF的duplex communication方式现在Session管理。 1、Session 管理提供的具体功能 我们的例子实现了下面一些Session Management相关的功能: Start/End Session: 可以调用service开始一个新的Session或者结束掉一个现有的Session。当开始一个Session的时候,service根据client端传入的client相关的信息(ClientInfo),创建一个SessionInfo对象,该对象由一个GUID类型的SessionID唯一标识,代表一个具体的Client和Service的Session。在service端,通过一个dictionary维护者一个当前所有的activesession列表,key为SessionID,value是SessionInfo对象。当client调用相应的service,传入对应的SessionID,该SessionID对应的SessionInfo从该session列表中移除。 Session Timeout:

WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]

谁说胖子不能爱 提交于 2020-03-23 10:55:08
我们都知道,WCF支持Duplex的消息交换模式,它允许在service的执行过程中实现对client的回调。WCF这种双向通信的方式是我们可以以Event Broker或者订阅/发布的方式来定义和调用WCF Service。今天我们就给大家一个具体的例子:通过WCF的duplex communication方式现在Session管理。 一、Session 管理提供的具体功能 我们的例子实现了下面一些Session Management相关的功能: Start/End Session: 可以调用service开始一个新的Session或者结束掉一个现有的Session。当开始一个Session的时候,service根据client端传入的client相关的信息(ClientInfo),创建一个SessionInfo对象,该对象由一个GUID类型的SessionID唯一标识,代表一个具体的Client和Service的Session。在service端,通过一个dictionary维护者一个当前所有的active session列表,key为SessionID,value是SessionInfo对象。当client调用相应的service,传入对应的SessionID,该SessionID对应的SessionInfo从该session列表中移除。 Session Timeout:

sqlalchemy union 联合查询

Deadly 提交于 2020-03-23 09:55:10
在最近的工作中遇到一个问题,要将两个字段相似的表里的数据统一起来展示在一个统计页面中。如果是单纯的展示数据那很简单,两个表查出来之后组合一下就完事了,但是有坑的地方就是分页和按照时间搜索,这两个功能决定了不可能单独查询两张表。在同事的建议下,使用了 union 的联合查询,最终完成这个功能。做一个简单的demo,记录下这个功能。 数据库和sqlalchemy安装请参考另一篇文章 sqlalchemy数据库查询小集合 定义数据表 定义 两张表,字段类型相同,但名称不同。 #coding:utf-8 from sqlalchemy import Column,CHAR,INTEGER from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker Base = declarative_base() class User(Base): __tablename__ = "user" id = Column(CHAR(20),primary_key = True) name = Column(CHAR(20)) age = Column(INTEGER) class Teacher(Base)

服务器负载均衡

≯℡__Kan透↙ 提交于 2020-03-23 08:58:32
当一个Web系统从日访问量10W增长到1000W,甚至超过1亿的过程中,Web服务器承受的压力就会越来越大,为了解决性能压力带来的问题,我们需要在Web系统架构方面搭建多个层次的缓存机制. 1.web负载均衡   简单的说就是给我们的服务器集群分配工作,而采用恰当的分配方式,对于保护处于后端的web服务器来说,非常重要。   用户--》负载均衡--》后端服务器集群。 负载均衡的策略很多,我们从原理上开始说!   (1)HTTP重定向       当用户发来请求的时候,web服务器通过修改响应头的Location来返回一个新的URL,然后浏览器继续请求这个新的URL,实际上就是页面重定向,通过重定向来达到负载均衡的目的。重定向非常容易实现,但是在大规模的访问量下,性能不佳,而且用户体验也不是很好,   (2)反向代理       反向代理服务的核心是转发http请求,因为它工作在http层(应用层),也就是OSI模型的第7层,因此也叫‘7层负载均衡',常见的是nginx.       nginx是一种非常灵活的反向代理的软件,可以自由的定制转发的策略,分配服务器流量权重,反向代理中,常见的一个问题就是web服务器存贮session数据,负载均衡一般是随机分配的,无法保证同一用户下次一定分配到相同的机器上,导致session无法找到!       解决方案:1

JSP 内置对象(request response session application out pageContext)

微笑、不失礼 提交于 2020-03-23 06:47:06
request对象 javax.servlet.http.HttpServletRequest接口的实例 request.setCharacterEncoding("utf-8");  设置字符编码方式 request.getContextPath();  返回站点的根路径,项目名/,由于解决相对路径的问题 request.getLocale().toString();  返回当地语言环境, request.getRemoteAddr()  获取客户端IP地址,返回值为String类型 request.getSession().getId();  得到session的id号,request.getSession() 返回和客户端相关的session,如果没有给客户端分配session,创建一个。 String request.getParameter(String name);返回name指定的参数的值,如果不存在返回null Object request.getAttribute(String name);返回Servlet环境对象中指定的属性对象,如果不存在返回null response对象 javax.servlet.ServletResponse类的实例 setContentType("text/html; charset=UTF-8"); 设置内容类型

MyBatis快速入门

微笑、不失礼 提交于 2020-03-23 05:47:33
先说说缘由为啥今天才来学习和总结MyBatis。。 我自己学Springboot刚入门的时候,用SptingBoot+JdbcTemplate+Thymeleaf 搭建了一个bug管理平台 后来自己用自己的接口,测试DB连接数对性能的影响,TPS会特别受到程序中连接池的配置影响 后来DB中就涌现了很多数据,我的bug管理平台,有一个接口是列出所有的bug,这个页面就会特别特别地慢,于是想到分页。 在网上查找分页信息的时候,发现大多数都是针对MyBatis的,用JdbcTemplate的查询,将没有现成的分页插件,需要自己改写JdbcTemplate中的一些方法,要添加页码和每页的条数 每天依旧,工作依旧。 忽然一日得闲,又开始自学SpringBoot,于是根据教程先用springboot+MyBatis+MyBatis插件 自动生成了Mapper和实体类。 难道MyBatis必须在SpringBoot框架中? 忽然冒出这样的疑问之后,就开始搜索MyBatis的历史,也开始最简单的学习。 mybatis是什么?最初开发出来做什么的? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。 2013年11月迁移到Github。

Flask 中内置的 Session

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-22 23:45:14
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from flask import session app = Flask(__name__) app.secret_key = "DragonFire" # 自己定义的字符串秘钥 secret_key 实际上是用来加密字符串的,如果在实例化的app中没有 secret_key 那么开启session一定会抛异常的 2. session 要这样用 @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": if request.form["username"] == USER["username"] and request.form["password"] == USER["password"]: session["user"] = USER["username"] return redirect("/student_list") return render_template("login.html", msg="用户名密码错误") return render_template(

Thymeleaf对象的使用:基本对象

泪湿孤枕 提交于 2020-03-22 21:16:17
Thymeleaf中有许多内置对象,可以在模板中实现各种功能。 下面有几个基本对象。 Web对象常用有:request、session、servletContext。 Thymeleaf提供了几个内置变量param、session、application,分别可以访问请求参数、session属性、application属性。 其中request的所有属性可以直接使用 ${属性名} 访问。 备注:内置对象与内置变量是两个概念,内置对象使用“${#对象}”形式,内置变量则不需要“#”。 开发环境:IntelliJ IDEA 2019.2.2 Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目。 1、pom.xml加入Thymeleaf依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 2、src/main/resources/templates/test1.html <div th:text="${param.name1}"></div> <div th:text="${#request.getAttribute('name2')}"><

flask 第十篇 after_request before_request

佐手、 提交于 2020-03-22 19:29:50
Flask我们已经学习很多基础知识了,现在有一个问题 我们现在有一个 Flask 程序其中有3个路由和视图函数,如下: from flask import Flask app = Flask(__name__) # type:Flask @app.route("/login") def login(): return "Login" @app.route("/index") def index(): return "Index" @app.route("/home") def home(): return "Login" app.run("0.0.0.0", 5000) 如果登陆了,就可以访问 index 和 home 页面,如果没登录就跳转到 login 登录 要怎么解决呢, session 对, 用 session 除了 Login 函数之外的所有函数里面全校验 session 是否登录了 太麻烦了,现在咱们只有3个函数,如果成百上千个怎么整啊 装饰器,对没错,装饰器是一个很好的方案,但是啊,我现在还是成败上千个函数,我要在每一个函数定义的时候加上@装饰器,还是很麻烦 那么就引出了我们要学习的第一个知识点: 1.@app.before_request 在请求(request)之前做出响应 from flask import Flask from flask import

TensorFlow学习

孤街醉人 提交于 2020-03-22 18:24:26
Tensorflow安装 总体来说还是要废好大周折的,捣鼓了两三天,可算是整完了,现在装大多装的是tensorflow2.0,官网提供的测试代码可能无法运行。起初不知,不知因为这个问题重装了多少遍,感觉电脑要被我整废了。。。。装的版本分为两个:cpu 、gpu。 cpu: 这个比较好办,但根据教程,(为保险起见)需要先装(必须是专业版)VS 2015 或者 VS2017 ,之后在VS中装入C++工具包。成功之后,根据官网所说,打开cmd,先将pip upgrade到最新版本,之后 install tensorflow,就可以啦。 gpu: 可能需要废些周章,需要另在自行安装cuda(前提是电脑拥有NVIDIA显卡并且支持gpu加速)、cuDNN(版本要与cuda匹配),并且配置好变量。详情见以下视频链接: https://www.bilibili.com/video/av70734671/?spm_id_from=333.788.videocard.2 安装好之后,运行以下代码进行检测,如结果如下则GPU版本安装成功了: import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' a = tf.constant(1.) b = tf.constant(2.) print(a+b) print(