让IIS支持SSE (Server Sent Events)

本文只探讨IIS+Python网站的情况,对于asp.net也应该不用这么麻烦。

先上结论:用反向代理: IIS + URL Rewrite + waitress

Waitress是一个纯python编写独立的WSGI服务器,功能比Gunicorn弱一些,但可以运行在windows平台上(Gunicorn 和 uwsgi 不支持windows)。

背景:用django做了个实时监控脚本执行状态的页面。里面用到了SSE技术,在开发环境一切正常,任务脚本执行过程中每个状态输出,web服务器端都会产生一个response推送给客户端,在浏览器中跨域实时看到任务执行状态。但部署到IIS中,web服务器会等全部任务执行完毕,才一次性把中间过程所有状态输出合并成一个response推送给客户端,界面卡住不动,无法实时看到当前状态。

折腾过程:

1、先是尝试了IIS禁用缓存、禁用动态内容压缩,问题依旧。

2、推断可能是wfastcgi导致的,问遍百度谷歌gpt都找不到禁用wfastcgi的buffer的方法

3、巨硬说部署django可以用HTTPPlatformHandler替代wfastcgi,于是折腾HTTPPlatformHandler,发现对于部署django网站HTTPPlatformHandler似乎真的比wfastcgi要简单呢!但无奈HTTPPlatformHandler还是解决不了禁用buffer的问题,并且github上HTTPPlatformHandler的开发者说v1.2确实有这个问题,但v1.2已经是最终版本,HTTPPlatformHandler会迁移到ASP.NET Core去。然后stackoverflow上有人说确实用ASP.NET Core解决了这个问题。

4、接着折腾ASP.NET Core,发现ASP.NET Core+python的部署指引在网上根本找不到。本来尝试肯一下ASP.NET Core的文档的,啃了一轮最后还是放弃了。

5、最终完全放弃IIS了,直接重新买个轻量云装linux,去折腾Nginx+uwsgi+django了,比较顺利地解决了SSE问题了。

6、但对IIS上部署还是有点不死心,于是又继续追着谷歌和gpt折腾这个问题,最后gpt建议试一下IIS反向代理,一试,居然成功了!而且配置并不复杂。嘛的此前折腾死我了!

下面是一个简单的步骤指南来配置IIS作为反向代理:

步骤 1: 安装 IIS 和必要的模块

  1. 确保安装了IIS。
  2. 安装URL Rewrite模块,这是一个IIS扩展,提供了URL重写功能。
  3. 安装Application Request Routing (ARR),ARR是一个IIS扩展,提供了代理功能。

步骤 2: 配置 Application Request Routing

  1. 打开IIS管理器。
  2. 选择服务器名称,在“应用程序请求路由缓存”下,打开“服务器代理设置”。
  3. 勾选“启用代理”,然后应用更改。

步骤 3: 配置web.config

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://127.0.0.1:8001/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

这个配置假设你的Django应用程序正在监听127.0.0.18001端口。所有到达IIS的请求将被重写(转发)到这个地址。

在windows系统上怎么启动waitress 我就不写了,网上有很多。备注一下,通过python runserver.py 方式启动waitress的代码如下:

# runserver.py

from waitress import serve
from xxxxxx.wsgi import application #xxxxxx.wsgi 中的xxx是自己项目目录名

serve(
    app=application,
    host='127.0.0.1',  # 如果不用反向代理,直接让waitress对外提供服务,这里就填0.0.0.0,端口填80
    port=8001
)

如果通过exe文件启动waitress的命令是:

# 须在虚拟环境下执行,
# ip:port 写0.0.0.0:80 还是写127.0.0.1:8000 请根据实际情况改
# xxxxx.wsgi 中的xxxx是wsgi.py 所在目录,这个文件夹名一般与项目名同名

path\to\waitress-serve.exe --listen=127.0.0.1:8001 xxxxx.wsgi:application


# 这条命令跟runserver.py中每一句的对应关系可以大致着样理解:
# waitress-serve.exe 中的 waitress 对应 from waitress
# waitress-serve.exe 中的 serve 对应 import serve
# listen=127.0.0.1:8001 对应host='127.0.0.1',port=8091
# xxxxx.wsgi 对应 from xxxxx.wsgi
# application 对应 import application

如果折腾ASP.NET Core来部署的话,这条命令可能用得上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/370993.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot智慧养老平台源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

牛客周赛 Round 31

D. 思路&#xff1a;使用map构造两个链表。 #include <bits/stdc.h> using namespace std;map<int,int> l,r; int main() {int q;cin>>q;int op-1e9-1;int ed1e91;r[op]ed;l[ed]op;while(q--){int a;cin>>a;if(a1){int x,y;cin>>x>>y;int…

echarts使用之饼图(四)

1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" cont…

【Elasticsearch】从入门到精通

目前java常见的针对大数据存储的方案并不多&#xff0c;常见的就是mysql的分库分表、es存储 这里偏向es存储方案&#xff0c;es不同的版本之间其实差异还挺大的&#xff0c;本篇博文版本Elasticsearch 7.14.0 Springboot整合Easy-Es Easy-Es官方文档 Elasticsearch的初步认识 …

【MATLAB源码-第135期】基于matlab的变色龙群优化算法CSA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 变色龙群优化算法&#xff08;Chameleon Swarm Algorithm&#xff0c;CSA&#xff09;是一种新颖的群体智能优化算法&#xff0c;受到自然界中变色龙捕食和社交行为的启发。变色龙以其独特的适应能力而著称&#xff0c;能够根…

【vue3学习P5-P10】vue3语法;vue响应式实现

0、vue2和vue3对比 框架版本API方式双向绑定原理domFragmentsTree-Shakingvue2选项式API&#xff08;Options API&#xff09;基于Object.defineProperty&#xff08;监听&#xff09;实现&#xff0c;不能双向绑定对象类型的数据【通过Object.defineProperty里面的set和get做…

【Linux网络编程三】Udp套接字编程网络应用场景

【Linux网络编程三】Udp套接字编程网络应用场景 应用场景一&#xff1a;远程命令执行应用场景二&#xff1a;与Windos端相互通信应用场景三&#xff1a;简单聊天1.多线程化2.输入输出分开 应用场景一&#xff1a;远程命令执行 简单的服务器上一篇已经完成&#xff0c;接下来我…

Java项目管理01-Maven基础

一、Maven的常用命令和生命周期 1.Maven的常用命令使用方式 complie&#xff1a;编译&#xff0c;将java文件编译为class字节码文件 clean&#xff1a;清理&#xff0c;删除字节码文件 test&#xff1a;测试&#xff0c;运行项目中的test类 package&#xff1a;打包&#x…

高斯消去法 | LU分解 | PA=LU分解(MatLab)

一、问题描述 利用高斯消去法&#xff0c;LU 分解及PALU 分解求解非线性方程组。 二、实验目的 掌握高斯消去法、LU 分解、PALU 分解的算法原理&#xff1b;编写代码实现利用高斯消去法、LU 分解、PALU 分解来求解线性方程组。 三、实验内容及要求 1. 利用顺序高斯消去法求…

计算机毕业设计社区居民服务管理系统SSM

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; vue mybatis Maven mysql5.7或8.0等等组成&#xff0c;B…

Redis——SpringBoot整合Redis实战

1、基本配置 1.1、引入依赖 首先&#xff0c;建立Maven项目&#xff0c;在Maven项目中引入pom.xml文件&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> &l…

HTML5和CSS3强化知识总结

HTML5的新特性 HTML5的新增特性主要是针对于以前的不足&#xff0c;增一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 HTML5新增的语义…

linux实时调度

面对陌生的知识体系&#xff0c;应该从什么角度来 简介 一、进程管理基本概念 在单处理器系统上&#xff0c;在给定时刻只有一个程序可以运行&#xff0c;在多处理器系统上&#xff0c;可以真正并行运行的进程数据&#xff0c;取决于物理CPU的数目&#xff1b; 进程优先级 …

git 合并多条提交记录

我要合并多条提交记录&#xff08;合并前7条为一条&#xff09;&#xff0c;实现如下效果&#xff1a; 使用git rebase // 查看前10个commit git log -10 // 将7个commit压缩成一个commit&#xff1b;注意&#xff1a;vim编辑器 git rebase -i HEAD~4 // add已经跟踪的文件 g…

接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…

Linux 用户和权限

Linux 用户和权限 一、root 用户&#xff08;超级管理员&#xff09;1.su和exit命令2.sudo 命令3.为普通用户配置sudo认证 二、用户和用户组1.用户组管理2.用户管理3.getent 命令 三、查看权限控制信息1.认识权限控制信息 四、chmod命令五、chown命令 一、root 用户&#xff08…

怎样理解Vue单向数据流

在前端开发中&#xff0c;数据流是一个非常重要的概念。Vue.js作为一种流行的前端框架&#xff0c;采用了单向数据流的架构&#xff0c;旨在简化开发过程并提高应用的可维护性。本文将探讨Vue单向数据流的含义以及它的使用方法。 什么是单向数据流&#xff1f; 在Vue中&#…

天拓四方:边缘计算网关功能、特点与应用举例

传统的数据处理方式面临网络延迟、带宽限制和安全风险等问题。为了解决这些问题&#xff0c;边缘计算技术应运而生&#xff0c;而边缘计算网关作为其核心组件&#xff0c;正发挥着越来越重要的作用。边缘计算网关位于数据源和云数据中心之间。它具备数据采集、协议转换、数据处…

flask+vue+python跨区通勤人员健康体检预约管理系统

跨区通勤人员健康管理系统设计的目的是为用户提供体检项目等功能。 与其它应用程序相比&#xff0c;跨区通勤人员健康的设计主要面向于跨区通勤人员&#xff0c;旨在为管理员和用户提供一个跨区通勤人员健康管理系统。用户可以通过系统及时查看体检预约等。 跨区通勤人员健康管…

基于微信小程序的校园水电费管理小程序的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…