WEB框架原理(socket)
生活随笔
收集整理的這篇文章主要介紹了
WEB框架原理(socket)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們可以這樣理解:所有的Web應(yīng)用本質(zhì)上就是一個(gè)socket服務(wù)端,而用戶的瀏覽器就是一個(gè)socket客戶端。 這樣我們就可以自己實(shí)現(xiàn)Web框架了。
socket服務(wù)端?
socket示例 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8000)) sk.listen()while 1:conn, addr = sk.accept()ret = conn.recv(10240)print(ret)conn.send(b"HTTP/1.1 200 OK\r\n\r\nooooojiba98k") 不同路勁返回不同的內(nèi)容 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8000)) sk.listen()while 1:conn, addr = sk.accept()ret = conn.recv(10240)ret_str = str(ret, encoding='utf-8')res = ret_str.split('\r\n')[0].split(' ')[1]print(res)if res == '/aaa/':msg = b'123'elif res == '/bbb/':msg = b'456'else:msg = b'789'conn.send(b'HTTP/1.1 200 OK\r\n\r\n')conn.send(msg)conn.close() 不同路勁返回不同內(nèi)容(函數(shù)版) import socket sk = socket.socket() sk.bind(('127.0.0.1', 8000)) sk.listen()def aaa(res):data = 'What you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def bbb(res):data = 'What you visited was:{}'.format(res)return bytes(data, encoding='utf-8')while 1:conn,addr = sk.accept()ret = conn.recv(10240)ret_str = str(ret, encoding='utf-8')res = ret_str.split('\r\n')[0].split(' ')[1]print(res)if res == '/aaa/':msg = aaa(res)elif res == '/bbb/':msg = bbb(res)else:msg = b'Not found'conn.send(b'HTTP/1.1 200 OK\r\n\r\n')conn.send(msg)conn.close() 不同路徑返回不同內(nèi)容(反射版) import socket sk = socket.socket() sk.bind(('127.0.0.1', 8000)) sk.listen()def aaa(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def bbb(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')res_list = [('/aaa/', aaa),('/bbb/', bbb) ] while 1:# ------連接部分------conn,addr = sk.accept()ret = conn.recv(10240)# 收到的字節(jié)轉(zhuǎn)化成字符串ret_str = str(ret, encoding='utf-8')# 對(duì)請(qǐng)求行進(jìn)行切割res = ret_str.split('\r\n')[0].split(' ')[1]# -------業(yè)務(wù)處理部分--------# 使用func變量保存將要執(zhí)行的函數(shù)for i in res_list:if i[0] == res:func = i[1]breakelse:func = None# 執(zhí)行函數(shù)if func:msg = func(res)else:msg = b'404Not found'# ----回復(fù)響應(yīng)消息----conn.send(b'HTTP/1.1 200 OK\r\n\r\n')conn.send(msg)conn.close() 返回網(wǎng)頁(yè) import socket sk = socket.socket() sk.bind(('127.0.0.1', 8000)) sk.listen()def aaa(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def bbb(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def login(res):with open('login.html', 'rb')as f:data = f.read()return datares_list = [('/aaa/', aaa),('/bbb/', bbb),('/login/', login), ] while 1:# ------連接部分------conn,addr = sk.accept()ret = conn.recv(10240)# 收到的字節(jié)轉(zhuǎn)化成字符串ret_str = str(ret, encoding='utf-8')# 對(duì)請(qǐng)求行進(jìn)行切割res = ret_str.split('\r\n')[0].split(' ')[1]# -------業(yè)務(wù)處理部分--------# 使用func變量保存將要執(zhí)行的函數(shù)for i in res_list:if i[0] == res:func = i[1]breakelse:func = None# 執(zhí)行函數(shù)if func:msg = func(res)else:msg = b'404Not found'# ----回復(fù)響應(yīng)消息----conn.send(b'HTTP/1.1 200 OK\r\n\r\n')conn.send(msg)conn.close() 返回動(dòng)態(tài)網(wǎng)頁(yè) import socket import time sk = socket.socket() sk.bind(('127.0.0.1', 8800)) sk.listen()def aaa(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def bbb(res):data = 'what you visited was:{}'.format(res)return bytes(data, encoding='utf-8')def login(res):with open('login.html', 'r', encoding='utf-8')as f:data = f.read()now = str(time.time())data = data.replace('@@**@@', now)return bytes(data, encoding='utf-8')res_list = [('/aaa/', aaa),('/bbb/', bbb),('/login/', login), ] while 1:# ------連接部分------conn, addr = sk.accept()ret = conn.recv(10240)# 收到的字節(jié)轉(zhuǎn)化成字符串ret_str = str(ret, encoding='utf-8')# 對(duì)請(qǐng)求行進(jìn)行切割res = ret_str.split('\r\n')[0].split(' ')[1]# -------業(yè)務(wù)處理部分--------# 使用func變量保存將要執(zhí)行的函數(shù)for i in res_list:if i[0] == res:func = i[1]breakelse:func = None# 執(zhí)行函數(shù)if func:msg = func(res)else:msg = b'404Not found'# ----回復(fù)響應(yīng)消息----conn.send(b'HTTP/1.1 200 OK\r\n\r\n')conn.send(msg)conn.close()?
<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Title</title> </head> <body> <h1>This is login page!</h1> <p>時(shí)間:@@**@@</p> </body> </html> HTML文件?
轉(zhuǎn)載于:https://www.cnblogs.com/chenyibai/p/9761853.html
總結(jié)
以上是生活随笔為你收集整理的WEB框架原理(socket)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win安装wordcloud报错解决方案
- 下一篇: mongodb模糊查询包含特殊字符