Thắc mắc về http/2

mình có xem qua vài bài giới thiệu về http2 và ưu điểm của nó so với http1

https://cabulous.medium.com/http-2-and-how-it-works-9f645458e4b2

mình thấy họ nói http2 sẽ thay vì mỗi request sẽ tạo 1 kết nối đến server, thì nó sẽ chỉ tạo 1 kết nối, và các request-response sẽ sử dụng chung cái kết nối này, và nó sẽ tạo ra các ID để những request-response này map đúng với nhau khi gửi và nhận dữ liệu, về lý thuyết là vậy, nhưng mình thắc mắc thực sự nó hoạt động thế nào?

mình có lên github tìm 1 vài cái project demo dùng http2 để request và response, thì chỉ thấy nó viết sẳn lib cho mình sài nên ko biết thực sự nó hoạt động ra sao bên trong

https://github.com/eclipse/jetty.project/blob/jetty-9.4.18.v20190429/jetty-alpn/jetty-alpn-java-client/src/test/java/org/eclipse/jetty/alpn/java/client/JDK9HTTP2ClientTest.java

nên mình tự suy diễn thế này:

giả sử ở phía client sẽ sử dụng lib của bên thứ 3 như 1 service để thực hiện việc gửi request và nhận response

ở client sẽ dùng multi thread để tạo 2 luồng chạy 2 command, nhưng 2 luồng này sài chung 1 connection do service kia tạo ra, nên chỗ này mình có 1 thắc mắc, có phải mỗi command kia sẽ được service tạo 1 ID, rồi sau này có response thì nó sẽ dựa vào ID này để trả về response cho đúng command ko?

chỗ này giả sử về mặt code thì mình sẽ viết thế nào nhỉ ? dùng 1 design pattern kiểu observer, để khi có sự kiện response là mình call các hàm của các observer đã đăng kí, để trả về response cho đúng command ?

2 Likes

bạn không tin thì bạn có thể tự kiểm chứng, không ai cấm đâu
nhưng theo xâc nói của bạn, thì bạn thì có vẻ như bạn không tự kiểm chứng được, vấn đề ở chỗ này
mình hỏi laii, bạn có thể kiểm chứng được cpu chỉ xử tín các tín hiệu on off và các phép logic không?

đúng rồi do mình muốn biết thực sự nó hoạt động bên trong thế nào, kiểu giả sử có 1 người yêu cầu mình tự viết 1 client, server hoạt động nguyên lý cho giống http2 thì mình cũng viết đc 1 phiên bản đơn giản nhất của nó, kiểu khi mình học lý thuyết ko là chưa đủ ấy, phải áp đc lý thuyết vào thực tiễn luôn, dù ở mức độ đơn giản nhất

cái này thì mình kiểm chứng đc, hồi học môn vi xử lý đã từng làm 1 mạch đơn giản để thực hiện phép công 1 bit bằng mạch board đèn led, các cổng and,or,not ( vi mạch)
rồi, trc đó cũng đã làm các cổng and, or, not bằng các transitor, và diot rồi, kiểu build mạch đơn giản nhưng vẫn thấy đc nó hoạt động đúng như lý thuyết, và nếu build to lên thì thành cpu

kiểu như này : https://www.youtube.com/watch?v=HyznrdDSSGM&list=PLowKtXNTBypGqImE405J2565dvjafglHU&ab_channel=BenEater

1 Like

mình đưa ra so sánh kiểm chứng http2 với cpu là muốn nói với bạn rằng, có những cái phức tạp người ta đã làm sẵn rồi, mình không có lý do để không tin,
hơn nữa cpu mà mình nói ở đây cũng không phải là loại đơn giải như của bạn đưa ra, với 8bit, bạn có thể thấy bằng mắt, nhưng với cpu intel hiện tại chẳn hạn, làm sao kiểm chứng được dòng điện trọng đó on/off, có chăng cũng là dùng phần mềm chứ không phải tự bạn thấy được
chính xác nhất và thoã mãn bản thân nhất vẫn là bạn tự implement ý tưởng của bạn thôi

trở lại với vấn đề, mình thấy vấn đề bạn đặt ra cũng thú vị, nên có tìm thử các implement của http2, thì ra được danh sách các lib implement http2 từ wiki của http2 ở link này

sau đó, mình chọn okhttp để đọc thử source code

và mình thấy được chỗ này, class Http2Connection

A connection hosts streams which can send and receive data.

sau khi đọc code, mình thấy rằng trong class mỗi lần request sẽ tạo 1 object Http2Stream (lib này đặt tên là thế) để handle request đó
trong steam đó mình thấy có id, và dùng id đó để định danh request

2 Likes

trên thực tế, http2 là 1 bộ specs, chỉ cần bạn implement theo bộ specs đó thì cái của bạn viết chính là http2
còn implement theo kiểu cũng không quan trọng

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?