flask实际开发:flask和nginx如何配置支持websocket

这篇具有很好参考价值的文章主要介绍了flask实际开发:flask和nginx如何配置支持websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用pycharm启动flask项目有坑,先修改pycharm设置

1、点击Edit Confiturations

flask实际开发:flask和nginx如何配置支持websocket

2、配置启动方式

flask实际开发:flask和nginx如何配置支持websocket

1 新增启动配置
2 选择使用python命令执行
3 给配置设置一个名字
4 设置要启动的模块的位置,flask基本都是app.py 模块

最后别忘记:点击右侧的apply

一、flask

1.1、flask框架配置支持websocket

依赖包:

pip install gevent-websocket==0.10.1
pip install gevent==21.1.2
pip install flask==1.1.2

1、配置方式一:使用到gevent-websocket 和gevent 共同实现

import time
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from flask import Flask, request

app = Flask(__name__)

@app.route('/ws')
def ws():
    socke = request.environ.get('wsgi.websocket')
    while True:
        msg = socke.receive()
        print('客户端发送的信息:', msg)
        if msg == None:
            print('客户端结束websocket连接')
            break
        socke.send(f'接收到的时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    return 'ok'

if __name__ == '__main__':
    # 使用WSGIServer使用项目支持sse,支持websocket
    ser = WSGIServer(('0.0.0.0', 8888), app, handler_class=WebSocketHandler)
    ser.serve_forever()

2、配置二:只使用gevent-websocket包

import time
from geventwebsocket.handler import WebSocketHandler
from geventwebsocket.server import WSGIServer
from geventwebsocket.websocket import WebSocket #语法提示
from flask import Flask
from flask import request
import time
print('flask启动...')
app = Flask(__name__)

@app.route('/ws')
def ws():
    sock = request.environ.get('wsgi.websocket')
    print(sock)
    while True:
        msg = sock.receive()
        print(msg,'接收到的数据')
        if msg==None:
            break
        sock.send(f'收到数据的时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    return 'ok'

if __name__ == '__main__':
    #使用WSGIServer使用项目支持sse,支持websocket
    ser = WSGIServer(('0.0.0.0',8888),app,handler_class=WebSocketHandler)
    ser.serve_forever()

1.2、通过python脚本发起websocket

依赖包:

pip3 install websocket-client

当nginx配置了证书,走https协议时,使用 wss://域名:443/api/ws 

from websocket import create_connection
import websocket

def main():
    #ambulance.thearay.net:443
    url = 'wss://ambulance.jinho.net:443/api/websocket/ws'
    ws = create_connection(url)
    print("获取连接状态:", ws.connected)
    while True:
        send_data = input('>>>>>>>>')
        print(f'send >>> {send_data}')
        ws.send(f"{send_data.strip()}")
        response = ws.recv()
        print("recv >>> ", response)
        if response =='close':
            break
    ws.close()

if __name__ == '__main__':
    main()

当nginx没有配置证书,走http协议时,使用ws://域名:80/api/ws

from websocket import create_connection
def main():
    url = 'ws:/ambulance.jinho.net:80/api/ws'
    ws = create_connection(url)
    print("获取连接状态:", ws.connected)
    while True:
        data = input('发送数据>>>>')
        ws.send(data)
        response = ws.recv()
        print("接收数据>>>>", response)
        if response=='close':
            ws.close()
if __name__ == '__main__':
    main()

二、nginx

最主要就是在代理flask请求的配置中,配置下面三个

 location /api/{

         proxy_pass http://127.0.0.1:8888/api/;

         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";

}

https配置

 server {
    	listen 443 ssl;
	    server_name 127.0.0.1;
    	ssl_certificate cert/8386707_ambulance.jinho.net.pem;
    	ssl_certificate_key cert/8386707_ambulance.jinho.net.key;
   	    ssl_session_timeout 5m;
    	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    	ssl_prefer_server_ciphers on;
    	client_max_body_size 10m;


	    location  /static  {
		    alias  C:/5G/5GApi/static; 
		}

	    location / {
		    root   C:\\5G\\nginx-1.17.8\\dist; #默认访问目录
            index  index.html;
		    # try_files $uri $uri/ /index.html;
		}

	    location /api/ {
		       #后端
		  
		       proxy_pass http://127.0.0.1:8888/;
		       proxy_buffering off; #nginx实现sse的功能,不配置就无法实现sse功能

		       #nginx配置支持websocket,下面三条
    	       proxy_http_version 1.1;
    	       proxy_set_header Upgrade $http_upgrade;
   	 	       proxy_set_header Connection "upgrade";
		   
               #websocket的超时处理
		       proxy_read_timeout 600s;
               proxy_connect_timeout 30s;
               proxy_send_timeout 60s;
		  }
	
#server的括号
    }

走http协议

 server {
    	listen 80;
	    server_name 127.0.0.1;
    	client_max_body_size 10m;
        root html;
        index index.html index.htm;

	    location  /static  {
		    alias  C:/5G/5GApi/static; 
		}

	    location / {
		    root   C:\\5G\\nginx-1.17.8\\dist; #默认访问目录
            index  index.html;
		    # try_files $uri $uri/ /index.html;
		}

	    location /api/ {
		       #后端
		  
		       proxy_pass http://127.0.0.1:8888/;
		       proxy_buffering off; #nginx实现sse的功能,不配置就无法实现sse功能

		       #nginx配置支持websocket,下面三条
    	       proxy_http_version 1.1;
    	       proxy_set_header Upgrade $http_upgrade;
   	 	       proxy_set_header Connection "upgrade";
		   
               #websocket的超时处理
		       proxy_read_timeout 600s; #两次请求之前不能超过600s,自动关闭连接的元凶
               proxy_connect_timeout 30s; #创建连接时60s超时
               proxy_send_timeout 60s;    #服务的发送数据时,60s超时

		  }

    }

四、可以测试网站

EasySwoole-WebSocket在线测试工具文章来源地址https://www.toymoban.com/news/detail-488926.html

到了这里,关于flask实际开发:flask和nginx如何配置支持websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx 配置支持websocket转发

    编辑nginx.conf,在http区域内一定要添加下面配置: http {     #自定义变量 $connection_upgrade     map $http_upgrade $connection_upgrade {         default          keep-alive;  #默认为keep-alive 可以支持 一般http请求         \\\'websocket\\\'      upgrade;     #如果为websocket 则为 upgra

    2024年02月06日
    浏览(33)
  • nginx配置websocket支持(官方版)

    程序中如果用到websocket实现后台与前台的及时通讯功能,如果后台用nginx进行反向代理, 那么就需要在nginx配置对websocket的支持。 否则前端就会报websocket超时的错误。 经常我们解决这种问题的思路是到网上搜索大家解决问题的方法。但是人云易云,我感觉最好的方式还是看看

    2024年02月03日
    浏览(23)
  • EF Core 在实际开发中,如何分层?

    分层就是将 EF Core 放在单独的项目中,其它项目如 Asp.net core webapi 项目引用它 这样的好处是解耦和项目职责的清晰划分,并且可以重用 EF Core 项目 但是也会数据库迁移变得复杂起来 创建一个 .NET 类库项目,项目名字为 BooksEFCore 引用以下 Nuget 包 Microsoft.EntityFrameworkCore.Relati

    2024年01月24日
    浏览(30)
  • Linux下Nginx配置SSL模块,Nginx安装SSL,Nginx支持https配置详细教程

    前提:Linux安装Nginx,参考教程:CentOS7安装Nginx完整教程,Linux系统下保姆式安装Nginx教程 | 老麻 安装好Nginx之后,需要支持SSL时,要单独安装SSL模块,方法如下: 输入 ./nginx –V 命令,注意V是大写,查看配置是否包含“–with-http_ssl_module”,包含则表示已配置好SSL,如果不包

    2024年02月08日
    浏览(40)
  • Linux配置Nginx SSL支持Https配置教程

    继承上篇 Linux安装Nginx 执行: ./nginx -V 命令 如果有输出 --–with-http_ssl_module 则说明已安装好SSL模块 进入安装目录 /usr/local/nginx-1.22.1 执行安装命令: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module 执行编译命令: make 注意:make成功后不要执行 make insta

    2024年01月18日
    浏览(32)
  • Nginx代理nginx.conf配置——反向代理(对WebSocket支持)

    基于Nginx代理nginx.conf配置——反向代理,如果要添加websocket支持,需要进行如下配置 在http中添加一下配置,添加对websocket支持 配置后重新运行nginx后,websocket即可成功代理。 注意防火墙端口是否开放、nginx如果使用docker,其对应的端口是否映射出来。

    2024年02月13日
    浏览(27)
  • nginx配置ssl支持https的详细步骤

    文章概要 :在建站的时候我们通常要让网站通过https进行访问,不然使用http过程中,所有信息都是未加密的,并且用户访问的时候浏览器会屏蔽我们的网站。本文介绍如何通过nginx配置ssl以支持通过https协议访问网站。 本文内容来自:谷流仓AI - ai.guliucang.com 打开nginx.conf配置

    2024年03月28日
    浏览(42)
  • ubuntu20安装nginx支持多站点及代理配置

    上文说到安装mysql、redis、net6及部署应用  GO 接着本次配置通过域名访问站点,站点总共分为两个,前端、后端 项目为前后端分离,管理包括服务+管理UI,为一个站点,管理UI,放到服务某个文件夹中 Web访问为另一个站点。 一、安装Nginx 二、增加站点配置文件 三、建立软连

    2024年02月03日
    浏览(28)
  • Nginx同时支持Http和Https的配置详解

    当配置Nginx同时支持HTTP和HTTPS时,需要进行以下步骤: 获得SSL证书:从可信任的证书颁发机构(CA)或使用自签名证书创建SSL证书。 将证书和私钥保存到服务器:将SSL证书和私钥文件保存到指定的位置,通常是 /etc/nginx/ssl/ 目录。 配置HTTP服务: 打开 Nginx 配置文件: 通常是

    2024年02月02日
    浏览(34)
  • 网站和API支持HTTPS,最好在Nginx上配置

    随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助! 生成SSL自签名证书

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包