使用Python3中socket模块搭建简易网站服务器(三)

使用Python3中socket模块搭建简易网站服务器(三)

本篇文章实现服务器同时为多台客户端进行服务

本章重点知识点

  1. 多进程 & 多线程

使用多进程方法
多进程必须依赖的库:multiprocessing

import multiprocessing

创建一个子进程

th = multiprocessing.Process(target = funcname,args = (client_socket,))

注意:
1.target参数内容(即funcname那里)为需要进行多进程处理的函数的函数名,args参数内容为需要传入被处理函数里的参数
2.funcname 指代的是你定义的用于服务客户端的函数的名字
3.若args参数的括号里仅有一个参数,那么必须像以上代码一样打上逗号
4.clien_socket指代的是客户端套接字对象

创建完成后需要启动进程

th.run()

注意:th为你创建的进程的对象名

以上可以实现创建一个子进程
但是我们必须把创建子进程的代码放入服务器代码的正确位置 并且做一些小修改 如以下代码

from socket import *
import multiprocessing

def main():
    '''程序主函数'''
    tcp_socket = socket(AF_INET,SOCK_STREAM)#创建tcp套接字
    tcp_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)#让端口释放后可以立即使用
    tcp_socket.bind(("127.0.0.1",1234))#地址绑定 127.0.0.1处填你需要绑定IP地址 1234处填你需要设置的端口号
    tcp_socket.listen(128)#开始监听
    while True:
	client_socket,client_addr = tcp_socket.accept()#准备接受连接
	th = multiprocessing.Process(target = service,args = (client_socket,))#创建子进程
	th.run()#启动子进程
	client_socket.close()#让主进程与客户端断开连接
	
def service(client_socket):
    '''为客户提供服务'''
    request = client_socket.recv(1024)#接收请求
    response = "HTTP/1.1 200 OK\r\n\r\nok"
    client_socket.send(response.encode("utf-8"))#发送信息
    client_socket.close()#断开连接

if __name__ == "__main__":#程序入口
    main()#调用主函数

以上的代码就可以实现服务器同时为多台客户端服务
修改处请对照我的上一篇文章
点击跳转我的上一篇文章

也可以使用多线程来实现 这里不多做介绍与解释 代码如下

from socket import *
import threading

def main():
    '''程序主函数'''
    tcp_socket = socket(AF_INET,SOCK_STREAM)#创建tcp套接字
    tcp_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)#让端口释放后可以立即使用
    tcp_socket.bind(("127.0.0.1",1234))#地址绑定 127.0.0.1处填你需要绑定IP地址 1234处填你需要设置的端口号
    tcp_socket.listen(128)#开始监听
    while True:
	client_socket,client_addr = tcp_socket.accept()#准备接受连接
	th = threading.Thread(target = service,args = (client_socket,))#创建线程
	th.run()#启动线程

def service(client_socket):
    '''为客户提供服务'''
    request = client_socket.recv(1024)#接收请求
    response = "HTTP/1.1 200 OK\r\n\r\nok"
    client_socket.send(response.encode("utf-8"))#发送信息
    client_socket.close()#断开连接

if __name__ == "__main__":#程序入口
    main()#调用主函数

多进程的方法与多线程方法运用到这里都可以
但也有差异 大家可以自行了解

本文章就到这里啦 祝大家学业有成!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值