07-2threading,gevent实现http服务器,返回浏览器html内容

# -*- coding: utf-8 -*-
import re
import socket
import threading
import gevent
from gevent import monkey

monkey.patch_all()	# 使用gevent多协程时,使用此代码,下面的内容不需要更改,正常写


def server(new_socket):
	recv = new_socket.recv(1024)
	request = recv.decode("utf-8")
	print(request)

	# GET / HTTP/1.1   "/"代表需求,主要用来获取客户端的请求
	# response += '<h1>1235aaa</h1>'

	try:
		# 正常的操作
		ret = request.splitlines()
		print(ret)
		ret = re.match(r"GET (/.*\s)",ret[0])
		print(ret)
		file_name = ""

		if ret:
			file_name = ret.group(1)
			print(file_name)
			if file_name == "/ ":
				file_name = "/index.html"
			f = open('.'+ file_name,'rb')
	
	except:
		# 发生以上多个异常中的一个,执行这块代码
		response = "HTTP/1.1 404 NOT FOUND \r\n"
		response += '\r\n'
		response += "-----error----"
		new_socket.send(response.encode("utf-8"))

	else:
		# 如果没有异常执行这块代码
		html_content = f.read()
		f.close()

		response = "HTTP/1.1 200 OK \r\n"
		response += "\r\n"

		new_socket.send(response.encode("utf-8"))
		new_socket.send(html_content)

	new_socket.close()


def main():
	tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)  # 牢记,此句关键,让端口腾出来,随时访问
	tcp_server_socket.bind(('',7093))
	tcp_server_socket.listen(128)
	while True:
		new_socket,add = tcp_server_socket.accept()
		# 1.tgreading 多线程
		# t1 = threading.Thread(target = server, args = (new_socket,))
		# t1.start()
		
		# 2.gevent 多协程
		gevent.spawn(server, new_socket)


if __name__ == '__main__':
	main()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值