前言

最近学习部署的时候,想到深度学习里面通常用的部署方法是flask做服务端,然后使用nginx做负载均衡,貌似也能做内网穿透。不过我不太懂负载均衡,只想利用本地电脑搭建一个简单的服务器,实现外部调用API服务的功能。所以本文会介绍到的内容有:

  • flask服务端与客户端的通信
  • ngrok简单地做内网穿透,使得非同一个局域网的电脑能够通过公网IP访问服务

国际惯例,参考博客:

flask官方文档

ngrok官方入口

ngrok的官方文档

Flask服务端和客户端

基于flask写一个上传文件的功能,不管你传输的是图像还是文字,都可以用这个代码接收,然后处理完毕再返回一些信息,比如深度学习的预测结果或者状态信息之类的。

本博客不介绍flask的使用方法,可以去flask官方快速入门章节看到非常详细的教程。

服务端

仿照flask官方上传文件的例子,直接写如下内容:

  • 路由:指示通过什么接口(ip+端口+入口)能够访问提供的功能函数
  • 功能:接收客户端信息,处理,返回结果信息
@app.route('/upload',methods=['POST'],strict_slashes=False)
def api_upload():file_dir=os.path.join(basedir,app.config['UPLOAD_FOLDER'])if not os.path.exists(file_dir):os.makedirs(file_dir)f=request.files["myfile"]  # 从表单的myfile字段获取文件,myfile为该表单的name值fname = request.form["name"]if f and allowed_file(fname):  # 判断是否是允许上传的文件类型f.save(os.path.join(file_dir,fname))  #保存文件到upload目录 print(url_for('uploaded_file',filename=fname))return jsonify({"succeed":'True',"msg":"upload succeed"})else:return jsonify({"succeed":'False',"msg":"upload failed"})

这里的操作是:

  • 路由:通过本地ip+端口+/upload访问此服务
  • 功能:读取服务端发送的文件和文件名,然后保存在本地,返回状态

【注】

额外说一句,有时候我们要修改函数内容,就不得不重启服务,但是如果我们使用

app.run(debug=True,host='0.0.0.0',port=5555)

debug设置为True,就可以不用重启服务,每次修改保存完毕后,服务会自动重启。

有时候会出现一句话:

 WARNING: This is a development server. Do not use it in a production deployment.Use a production WSGI server instead.

改成:

serve(app, host="0.0.0.0", port=5555) #product

就没有这个warning

客户端

官方新建了一个html作为服务端,我们也可以使用python写一个客户端

实现的功能就是:

  • 读取文件为二进制数据,并获取文件名
  • 将文件和文件名发送到服务器

如果想要访问你的服务的人和你在同一个局域网,可以通过ipconfig先看看自己的ip地址,以下内容均假设我的是192.168.3.10

使用html作为客户端

这样就在服务端写一个html的入口,用户访问这个端口的时候,显示一个上传界面,然后进行通信

@app.route('/test/upload')
def upload_test():return render_template('upload.html')

但是需要注意,这个html存在一个名为templates文件夹中

<form id="form1" method="post" action="/upload" enctype="multipart/form-data"><div><input id="File1" type="file" name="myfile"/><input id="name" type="text" name="name"/><input type="submit">提交</input></div>
</form>

打开服务端以后,直接在电脑上输入http://192.168.3.10:5555/test/upload就可以进入传输界面

使用python写客户端

基本就是POST通信方法

def upload_file(file_path):file_bin = open(file_path,'rb').read()upload_content = {"myfile":file_bin}upload_name = {"name":os.path.basename(file_path)}r = requests.post(REST_API_URL,data=upload_name,files=upload_content).json()if(r['succeed']):print("success")else:print("failed")

这里有一个REST_API_URL参数,代表的是访问服务器的地址、端口、入口,所以本文的

REST_API_URL = 'http://192.168.3.10:5555/upload'

ngrok内网穿透

有时候用户和你不在同一个局域网是无法通过上述ip访问到你的服务的(如果用"0.0.0.0"可以让用户访问你的服务,则无需穿透),所以需要将内网提供服务的端口映射到外网,网上有很多内网穿透的工具和教程,我只是Google了一下ngrok,然后进入第一个网址,看着像官方的,然后引入眼帘的就是这样一张图

就是这么简单,直接去下载你电脑对应的可执行文件,然后直接输入

ngrok http 5555
pause

这就是将内网的5555端口映射到了http://48a7fd5eedbb.ngrok.io,比如上面的那个html网页,我们可以通过任意一台联网电脑访问,访问地址为

http://48a7fd5eedbb.ngrok.io/test/upload

后记

做算法的,能简单的快速验证提供API能力就行啦,至于什么服务分发,交给开发折腾就行。我问了一下身边的大佬,虽然网上说nginx可以做服务穿透,但是它经常用于服务分发,比如有100个用户访问同时同一个服务,部署在一台电脑上可能会炸了,或者造成等待,那么我们可以通过nginx把这些请求分发到不同服务器上去计算。后续有时间再研究。

完整的python脚本实现放在微信公众号的简介中描述的github中,有兴趣可以去找找,同时文章也同步到微信公众号中,有疑问或者兴趣欢迎公众号私信。

Flask服务部署与简单内网穿透相关推荐

  1. 在安卓上部署服务器 - 解决内网穿透

    原文地址:在安卓上部署服务器 - 解决内网穿透 本系列其他文章: 在安卓上部署服务器 在安卓上部署服务器 – 应用程序的配置 在安卓上部署服务器 – 解决内网穿透问题 在安卓上部署服务器 – 部署脚本 ...

  2. 简单内网穿透-利用树莓派-低成本建站 无需公网ip

    很多人都想试试自己建站玩一玩 (比如博客.自建网盘.远程下载等),但家里宽带没公网 IP,特意买台服务器又显得浪费.那么有没成本小.可玩性高.又能长期稳定使用的方案呢? 其实,免费的内网穿透工具 (如 ...

  3. 免费搭建虚拟机Linux服务器,附带部署项目和内网穿透教程(亲测有效)cd

    最近在学习Linux服务器上进行项目部署,大家都知道在云服务器上可以部署项目,这可以使得在任何地方都可以访问到项目.但购买服务器是要收费的,这使得我十分香菇....但是还有办法的,在VMware虚拟机 ...

  4. Ubuntu内网穿透搭建网站:设置跳转本地网页服务 6/17

    系列文章 Ubuntu内网穿透搭建网站:建立本地数据库 1/17 Ubuntu内网穿透搭建网站:安装WordPress 2/17 Ubuntu内网穿透搭建网站:设置WordPress连接数据库 3/1 ...

  5. 如何升级cpolar内网穿透的套餐服务级别

    系列文章 如何升级cpolar内网穿透的套餐服务级别 升级cpolar内网穿透能够获得的功能 cpolar作为一款安全高效的内网穿透软件,拥有众多应用场景,从网站开发的客户预览和测试.个人本地网页发表 ...

  6. 基于FRP反向代理工具实现内网穿透攻击

    文章目录 前言 FRP反向代理 内网环境搭建 服务端的配置 客户端的配置 FRP内网穿透 FRP进阶使用 fscan内网神器 总结 前言 当我们拿下目标单位的一台外网服务器后,需要借助外网服务器作为跳 ...

  7. frp内网穿透—将kali代理在公网中进行渗透测试

    文章目录 前言 Frp简介 准备工具 实现内网穿透 frp服务端配置 frp客户端配置 测试 HTTP服务测试 ssh服务测试 反弹shell测试 注意 前言 由于工作常需要用到kali,但是公网服务 ...

  8. ngrok 内网穿透+实现远程桌面

    最近公司电脑的teamviewer经常被中断,基本上没办法使用了.而且破解越来越难,破解后没多久又被检测到.所以我想着换另一种方案来实现远程控制,公司内网服务器没有公网ip,所以只能进行内网穿透.内网 ...

  9. 内网穿透之使用神卓互联V8.5.9客户端访问用友ERP系统

    由于工作原因平时经常帮客户安装神卓互联系列软件,最近神卓互联官方发布了内网穿透私有云V8.5.9版本的客户端,界面变化还是比较大的,从以前黑色变成了白色,按钮和布局也发送了改变,有必要写一篇记录一下, ...

最新文章

  1. /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference toTIFFIsTiled@LIBTIFF_4.0'
  2. 第8天:我用AI算法造了一些“网红”
  3. matlab常用命令参考
  4. 机器学习-算法背后的理论与优化(part5)--结构风险最小(下)
  5. ASP.NET Core依赖注入最佳实践,提示技巧
  6. thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识
  7. powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
  8. Google DeepMind 团队发布新算法,下一个被 AI 虐哭的是谁?
  9. 他山之石 可以攻玉-《海量数据库解决方案I》
  10. ios人脸识别_适用于Android和iOS的10种最佳人脸识别应用程序
  11. 【色彩管理】ICC曲线制作教程
  12. JAVA中RandomAccess接口
  13. 【黑苹果装机实践】从硬件选择到系统安装
  14. DRV8872直流电机驱动芯片简要的使用说明
  15. 模拟SPI驱动SD卡
  16. 最大公共字符串,最大公共子序列,编辑距离,myers等算法
  17. 计算机专业群名有内涵,好听的群名字来了 高雅有内涵
  18. 基于(plc)portal v14的三级传送带设计
  19. java里什么是三目表达式_浅谈Java三目运算
  20. [猿来小课]Python开发入门第三讲:Python的安装

热门文章

  1. java 开源so库_NDK使用之引用.so开源库
  2. [蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)
  3. [蓝桥杯]算法提高 道路和航路(spfa+deque+快读优化)
  4. 修改date格式 java_如何用Java更改日期格式?
  5. 免费时代的4种销售方式
  6. linux ubuntu ssh,Linux(Ubuntu)安装ssh服务
  7. oracle odbc 设置_Oracle删除不干净怎么办?
  8. 深度学习之卷积神经网络(10)CIFAR10与VGG13实战
  9. mysql group 分页_【MySQL】条件查询之排序聚合分组分页查询
  10. html修改原生checkbox选中的颜色_[三分钟小文]前端性能优化-HTML、CSS、JS部分