python并发服务器_Python简单并发服务器,python

import socket

import re

import threading

import sys

class Wsgi:

def __init__(self, ip_port):

# 创建套接字

self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定端口

self.socket.bind(("", ip_port))

self.socket.listen(128)

# 静态文件路径

self.static_files = "./static"

def request_deal(self, new_socket):

try:

recv_data = new_socket.recv(1024).decode("utf-8")

except:

new_socket.close()

else:

if not recv_data:

new_socket.close()

# 提取请求的文件(index.html)

# GET /a/b/c/d/e/index.html HTTP/1.1

request_url = re.search(r"/\S*", recv_data).group()

if request_url == "/":

request_url = "/index.html"

try:

file = open(self.static_files + request_url, "r")

except:

print("没有找到这个文件%s" % request_url)

response_headers_line = "HTTP/1.1 404 not found\r\n"

response_headers = "Content-Type:text/html;charset=utf-8\r\n"

new_socket.send((response_headers_line + response_headers + "\r\n" + "网页没有找到").encode("utf-8"))

else:

response_headers_line = "HTTP/1.1 200 ok\r\n"

response_headers = "Content-Type:text/html;charset=utf-8\r\n"

new_socket.send((response_headers_line + response_headers + "\r\n" + file.read()).encode("utf-8"))

finally:

new_socket.close()

def run(self):

while True:

# 服务器一直等待客户端连接

new_socket, ip_port = self.socket.accept()

# 多线程的方式同时运行多个客户端

reso_url_thread = threading.Thread(target=self.request_deal, args=(new_socket,))

reso_url_thread.start()

if __name__ == '__main__':

# 传参数执行sys.argv

# 正确的执行方式是 python tcp-server.py 8080

if len(sys.argv) == 2:

# 输入端口必须是数字

if not sys.argv[1].isdigit():

print("输入方式应该为:python tcp-server.py 端口")

# sys.argv[1] 代表的是端口8000,需要强转成int类型

else:

a = Wsgi(int(sys.argv[1]))

a.run()

else:

print("输入方式应该为:python tcp-server.py 端口")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值