免费网站管理系统,网站服务器在哪里,徐州专业网站制作,东莞市建筑设计院前言
最近学习部署的时候#xff0c;想到深度学习里面通常用的部署方法是flask做服务端#xff0c;然后使用nginx做负载均衡#xff0c;貌似也能做内网穿透。不过我不太懂负载均衡#xff0c;只想利用本地电脑搭建一个简单的服务器#xff0c;实现外部调用API服务的功能。…前言
最近学习部署的时候想到深度学习里面通常用的部署方法是flask做服务端然后使用nginx做负载均衡貌似也能做内网穿透。不过我不太懂负载均衡只想利用本地电脑搭建一个简单的服务器实现外部调用API服务的功能。所以本文会介绍到的内容有
flask服务端与客户端的通信ngrok简单地做内网穿透使得非同一个局域网的电脑能够通过公网IP访问服务
国际惯例参考博客
flask官方文档
ngrok官方入口
ngrok的官方文档
Flask服务端和客户端
基于flask写一个上传文件的功能不管你传输的是图像还是文字都可以用这个代码接收然后处理完毕再返回一些信息比如深度学习的预测结果或者状态信息之类的。
本博客不介绍flask的使用方法可以去flask官方快速入门章节看到非常详细的教程。
服务端
仿照flask官方上传文件的例子直接写如下内容
路由指示通过什么接口(ip端口入口)能够访问提供的功能函数功能接收客户端信息处理返回结果信息
app.route(/upload,methods[POST],strict_slashesFalse)
def api_upload():file_diros.path.join(basedir,app.config[UPLOAD_FOLDER])if not os.path.exists(file_dir):os.makedirs(file_dir)frequest.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,filenamefname))return jsonify({succeed:True,msg:upload succeed})else:return jsonify({succeed:False,msg:upload failed})这里的操作是
路由通过本地ip端口/upload访问此服务功能读取服务端发送的文件和文件名然后保存在本地返回状态
【注】
额外说一句有时候我们要修改函数内容就不得不重启服务但是如果我们使用
app.run(debugTrue,host0.0.0.0,port5555)将debug设置为True就可以不用重启服务每次修改保存完毕后服务会自动重启。
有时候会出现一句话 WARNING: This is a development server. Do not use it in a production deployment.Use a production WSGI server instead.改成
serve(app, host0.0.0.0, port5555) #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 idform1 methodpost action/upload enctypemultipart/form-datadivinput idFile1 typefile namemyfile/input idname typetext namename/input typesubmit提交/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,dataupload_name,filesupload_content).json()if(r[succeed]):print(success)else:print(failed)这里有一个REST_API_URL参数代表的是访问服务器的地址、端口、入口所以本文的
REST_API_URL http://192.168.3.10:5555/uploadngrok内网穿透
有时候用户和你不在同一个局域网是无法通过上述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中有兴趣可以去找找同时文章也同步到微信公众号中有疑问或者兴趣欢迎公众号私信。