周三下午三點(diǎn),一個(gè)PHP開發(fā)者刪掉了自己過去三年維護(hù)的QUIC集成代碼。不是他放棄了,而是他發(fā)現(xiàn),從今天起,這些膠水和補(bǔ)丁再也用不上了——PHP可以直接用OpenSSL原生說出QUIC,而他只需要安裝一個(gè)擴(kuò)展。
新發(fā)布的php-quic 1.0.0掏出了最直白的那張牌:它是一個(gè)把OpenSSL 3.5里現(xiàn)成的QUIC棧暴露出來的PHP擴(kuò)展,沒有第二個(gè)TLS棧,沒有外部FFI膠水層,也不用再在構(gòu)建流程里塞進(jìn)一套R(shí)ust工具鏈。如果你的OpenSSL打好了補(bǔ)丁,那你的QUIC也就打好了補(bǔ)丁。
在此之前,想在PHP里折騰QUIC,得先綁上一個(gè)像ngtcp2或quiche這樣的外部庫(kù),然后你的應(yīng)用就自動(dòng)多背了一份TLS實(shí)現(xiàn)、一份獨(dú)立的漏洞追蹤清單、一套和發(fā)行版完全不沾邊的版本矩陣。對(duì)于一門一切都指望包管理器打理的語言來說,這簡(jiǎn)直是把能踩的坑都趟了一遍。
OpenSSL 3.5自帶的QUIC客戶端與服務(wù)端能力,直接把問題拆成了兩塊板:以前是“把一整套QUIC實(shí)現(xiàn)塞進(jìn)PHP”,現(xiàn)在不過是“把已經(jīng)坐在那里的QUIC打開門窗請(qǐng)出來”。擴(kuò)展老老實(shí)實(shí)交出連接和流,離HTTP/3遠(yuǎn)遠(yuǎn)的——它只提供傳輸,你如果非要用HTTP/3,得自己在上面搭HEADERS幀和QPACK,README里甚至附了一份完整示例。
更讓人舒坦的是寫給DNS-over-QUIC的那十幾行代碼。發(fā)起一個(gè)連接,定好ALPN是doq,用長(zhǎng)度前綴包一條DNS查詢往流里一扔,再讀回兩個(gè)字節(jié)的長(zhǎng)度和響應(yīng),就完事了。一條流一次查詢,剛好對(duì)上RFC 9250的口徑,而流便宜得不像話。
服務(wù)端也同樣被拽進(jìn)了現(xiàn)實(shí)。你可以開一個(gè)監(jiān)聽器,指定證書和私鑰,從那里接受QUIC連接。沒有額外的中間件,沒有各懷心思的轉(zhuǎn)發(fā)層,就像監(jiān)聽一個(gè)TCP端口那樣自然。
所以這一次,PHP沒去重新發(fā)明車輪,它只是把早就長(zhǎng)在OpenSSL身上的那四個(gè)輪子擦亮了而已。而那四個(gè)輪子,全是UDP上的TLS 1.3、擁塞控制、丟包恢復(fù)和多路復(fù)用流,一樣不少,而且全都已經(jīng)替你把硬骨頭啃完了。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.