python利用面向对象,协程开发web后端服务器
2017-11-21 16:40
435 查看
web后端入门级别!
开发语言:
python3
模块:
gevent os re socket
编辑器:
博主用的 vim
简介:
我们这里是利用了python最基础的知识来实现得网站后端,所以比较容易理解,代码里的”static”是博主本地的文件夹,文件夹内存放了一些html文件和图片,都可以通过ip+文件名来进行访问.
开发语言:
python3
模块:
gevent os re socket
编辑器:
博主用的 vim
简介:
我们这里是利用了python最基础的知识来实现得网站后端,所以比较容易理解,代码里的”static”是博主本地的文件夹,文件夹内存放了一些html文件和图片,都可以通过ip+文件名来进行访问.
# 导入gevent的monkey模块,破解具有阻塞功能的方法 from gevent import monkey monkey.patch_all() import gevent import os import re import socket class HTTPServer(object): """创建服务器类""" def __init__(self): # 创建套接字 self.tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 设置端口重用 self.tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 固定端口号 self.tcp_socket.bind(("", 5566)) # 转换为被动套接字 self.tcp_socket.listen(128) def deal_request(self,client_socket): # 接受客户端请求 data = client_socket.recv(4096) # 分割客户端请求行,请求头 data_list = data.decode().split("\r\n") # 打印分割完成的列表 print(data_list) # 匹配请求行内的请求路径 match_str = re.match(r"\w+\s+(\S+)",data_list[0]) # 通过分组获取请求路径 match_str = match_str.group(1) # 如果为空直接关闭 if not match_str: client_socket.close() print("请求错误") return # 如果为/默认转换为/index.html if match_str == "/": match_str = "/index.html" try: # 打开文件 读取内容 关闭文件 file1 = open("static"+match_str,"rb") file_data = file1.read() file1.close() except: # 如果文件不存在服务器回复404 response_line = "HTTP/1.1 404 NOT FOUND\r\n" response_header = "Server: bfe/1.0.8.13-sslpol-patch\r\n\r\n" response_body = response_line + response_header + "404错误" client_socket.sendall(response_body.encode("gbk")) else: # 如果文件存在回复200 并发送文件内容为响应体 response_line = "HTTP/1.1 200 OK\r\n" response_header = "Server: bfe/1.0.8.13-sslpol-patch\r\n\r\n" response_body = response_line + response_header client_socket.sendall(response_body.encode()+file_data) finally: # 关闭套接字 client_socket.close() def run(self): while True: # 从等待队列中取出 client_socket, client_ip = self.tcp_socket.accept() # 创建并启动套接字 son = gevent.spawn(self.deal_request,client_socket) def main(): # 创建服务器类 server = HTTPServer() server.run() if __name__ == "__main__": main()
相关文章推荐
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现
- Python在web开发中简单服务器的搭建与运行问题
- Python开发web服务器——留言板
- 我的第一个python web开发框架(7)——本地部署前端访问服务器
- 原来python开发后端服务器还可以这么简单(未完成)
- Mac中利用 python 安装 web 服务器
- 利用python实战开发一个web管理系统框架
- Python在web开发中简单服务器的搭建与运行问题
- Python 异步 IO 的未来(从 Web 后端开发的角度)
- 利用python编写设计多线程web服务器(计算机网络_自顶向下第六版_第二章1和4的编程作业)
- python web后端开发工程师的面试总结
- Python游戏服务器开发日记(七) 关于协程(greenlet)和C语言的思考
- python做web开发时用的是什么服务器?
- 一个初级python web后端开发工程师的面试总结
- python开发web服务器——搭建简易网站
- 利用Python自带的包可以建立简单的web服务器
- Linux 下 将使用Python-Django开发的web应用布置到服务器上
- Python Flask web后端开发
- CocosCreator开发笔记(1)-用Python命令快速搭建Web发布服务器
- 我的第一个python web开发框架本地部署前端访问服务器