多種方式實現http服務

2021-08-27 18:55:17 字數 3009 閱讀 4953

在對伺服器實現web服務的時候,面對多個使用者的請求時,我們可以採取多程序或者多執行緒。

下面是他們的實現**:

import urllib.request

import multiprocessing

import re

import socket

def service_client(new_socket):

"""為客戶端服務"""

# 接受瀏覽器發過來的請求

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

# 返回http格式的資料,給瀏覽器

# 建立socket

tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)

# 繫結

tcp_socket.bind(("",7788))

# 監聽套接字

tcp_socket.listen(128)

# 等待客戶端的連線

while true:

new_socket,client_addr = tcp_socket.accept()

# 為這個客戶端服務

p = multiprocessing.process(target=service_client,args=(new_socket,))

p.start()

new_socket.close()

tcp_socket.close()

if __name__=="__main__":

http_serve()

多執行緒和多程序**差不多就不一一貼出了,但是今天主要是想談一下另一種實現的方式就是協程gevent。協程相比程序和執行緒而言,用的資源更少,效率更高。

**如下:

import urllib.request

import multiprocessing

import re

import socket

import gevent

from gevent import monkey

monkey.path_all()

def service_client(new_socket):

"""為客戶端服務"""

# 接受瀏覽器發過來的請求

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

# 返回http格式的資料,給瀏覽器

# 建立socket

tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)

# 繫結

tcp_socket.bind(("",7788))

# 監聽套接字

tcp_socket.listen(128)

# 等待客戶端的連線

while true:

new_socket,client_addr = tcp_socket.accept()

# 為這個客戶端服務

strlen函式的多種實現方式

strlen函式檢測字串實際長度,不包含 0 如 char s 1234567 int a strlen s a 7 可認為strlen char 檢測的是 0 strlen char 碰到 0 就返回 0 以前的字元數。include include include includeint my s...

web動畫實現的多種方式

html5 css3時代,我們要在web裡做動畫選擇其實已經很多了 你可以用css3的animattion keyframes 你也可以用css3的transition 你還可以用通過在canvas上作圖來實現動畫,也可以借助jquery動畫相關的api方便地實現 當然最原始的你還可以使用windo...

多種方式實現兩列布局

兩列布局使我們再做頁面的時候用的最多的布局方式,也是設計稿種最常見的一種布局型別,一般分為 一列固定寬度另一列自適應寬度,兩列自適應寬度,兩列相同高度等形式 這篇文章將詳細介紹各種兩列布局的實現方式 說起 布局是在css3之前相容性最好的一種布局方式,使用 做兩列自適應寬度或者高度布局能夠在ie6瀏...