亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ThreadingTCPServer 與 ThreadingMixIn HTTPServer

ThreadingTCPServer 與 ThreadingMixIn HTTPServer

忽然笑 2022-06-14 11:00:25
我編寫了兩臺服務器,它們本質上用不同的方法做同樣的事情。兩者都是具有圍繞套接字對象的非阻塞 ssl 包裝器的網絡服務器。線程允許同時處理多個請求。一個使用 ThreadingTCPServer,另一個調用 HTTPServer 模塊上的 ThreadingMixIn。我應該使用哪一個,如果其中任何一個比另一個更好,為什么?HTTPServer 上的 ThreadingMixIn:#!/usr/bin/env python3# -*- coding: utf-8 -*-import os, sslfrom socketserver import ThreadingMixInfrom http.server import SimpleHTTPRequestHandler, HTTPServerMYSERV_WORKDIR = "/media/kingdian/server_pub"#MYSERV_CLIENTCRT = "/home/ran/keys/client.pem"MYSERV_FULLCHAIN = "/home/ran/.acme.sh/example.com_ecc/fullchain.cer"MYSERV_PRIVKEY = "/home/ran/.acme.sh/example.com_ecc/example.com.key"global sslcontextsslcontext = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH)sslcontext.options |= ssl.OP_NO_TLSv1sslcontext.options |= ssl.OP_NO_TLSv1_1#sslcontext.options |= ssl.OP_NO_TLSv1_2#sslcontext.protocol = ssl.PROTOCOL_TLS#sslcontext.verify_mode = ssl.CERT_REQUIREDsslcontext.set_ciphers("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305")sslcontext.set_ecdh_curve("secp384r1")#sslcontext.load_verify_locations(MYSERV_CLIENTCRT)sslcontext.load_cert_chain(MYSERV_FULLCHAIN, MYSERV_PRIVKEY)class HSTSHandler(SimpleHTTPRequestHandler):    def end_headers(self):        self.send_header("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload")        self.send_header("Content-Security-Policy", "default-src 'self'")        self.send_header("X-Content-Type-Options", "nosniff")        self.send_header("X-Frame-Options", "SAMEORIGIN")        self.send_header("X-XSS-Protection", "1; mode=block")        self.send_header("Referrer-Policy", "no-referrer")        SimpleHTTPRequestHandler.end_headers(self)class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):    daemon_threads = True
查看完整描述

1 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

這些幾乎是兩種不同的方式來獲得相同的最終結果。如果您查看 的實現ThreadingTCPServer,那就是:

class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass

在另一個示例中,HTTPServer它只是一個非常小的包裝器TCPServer(添加一個覆蓋server_bind以存儲服務器主機名并自動設置allow_reuse_address),然后您的代碼直接添加ThreadingMixIn.

因此,最終,無論哪種方式,您都會經歷相同的基本代碼。隨著時間的推移,python 庫中的類層次結構發生了輕微的變化,因此不同的代碼示例最終以不同的組合來做事。

就個人而言,對于您的示例,我發現使用ThreadingTCPServer更清潔的版本,只是因為在其他地方處理了一個額外的類,因此代碼略小。OTOH,另一個版本允許更多的靈活性,因為您已經定義了一個可以控制線程混合屬性的點,HTTPServer如果這對您來說很重要,您還可以獲得額外的包裝位。


查看完整回答
反對 回復 2022-06-14
  • 1 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號