-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội
Vì yêu nên chẳng muốn dừng!
Một chủ đề có lẽ là rất rất nhiều anh em ở đây quan tâm và chờ đón nhỉ?. Đúng vậy (lương toàn nghìn đô mà, 😃) với sức mạnh máy tính không ngừng gia tăng, nhu cầu kết nối cao với nguồn thông tin đa dạng và sự cạnh tranh gay gắt. Chẳng ai lại muốn khách hàng của mình lại nhìn vào một trang web nhạt nhẽo với những hình ảnh không bao giờ thay đổi, và cũng chẳng khách hàng nào muốn mua một sản phẩm mà họ không hiểu gì về nó và càng ức chế hơn khi không thể nào nhận được sử trợ giúp kịp thời khi gặp lỗi, chung quy lại đó chính là nhu cầu tương tác.
Stateless
Một trang web tĩnh, hay các trang web động được viết bằng jsp, php dotnet trả về các trang HTML (chúng ta gọi đó là stateless - tạm hiểu là client kết nối đến server nhận được kết quả rồi thế là xong, 2 bên đường ai lấy đi). Câu hỏi đặt ra là bây giờ khách hàng muốn #chat với bạn hoặc bạn muốn thông báo một sản phẩm mới ra mắt cho khách hàng thì sao? Thật thú vị là đã có người thuê mình làm kiểu này bằng HTTP, cứ 1 giây hoặc 3 giây gọi 1 lần để gửi nhận message hoặc lấy sản phẩm 1 lần và điều này giống như kiểu DDoS server vậy, CPU lúc nào cũng 100% và mình không chắc là server có xử lý được hết request và có bao nhiêu request bị drop không nữa.
HTTP Long Polling
Để giải quyết vấn đề này ngày xưa mình có tìm được 1 giải pháp tên là HTTP Long Polling, nghĩa là lợi dụng giao thức HTTP, khi client gửi Request lên server, thì server không ngắt kết nối khi xử lý xong request của client, mà cứ hold cái kết nối đó đến bao giờ client ngắt kết nối hoặc server chủ động gọi ngắt kết nối thì thôi và từ đó thì #Client và Server có thể giao tiếp với nhau mà không cần khởi tạo kết nối mới.
WebSocket
Đây cũng chính là tư tưởng của WebSocket (Gọi là giao thức websocket). Về bản chất Websocket chính là HTTP Long Polling nhưng nó được tiêu chuẩn hóa thông qua rfc6455. Websocket quy định 2 thứ:
- Các bước để client và server kết nối với nhau: websocket sống nhờ vào HTTP nên nó cũng cần thực hiện đầy đủ các bước kết nối của HTTP và thêm một bước nữa gọi là nâng cấp (Upgrade) thông qua HTTP header để client và server hiểu và không ngắt kết nối.
- Định dạng của một message: Bao gồm tối thiểu 1 byte để lưu các cờ, tối thiểu 7 bit để lưu kích thước của message và cuối cùng là nội dung message
Ưu và nhược điểm
Websocket hay HTTP Long Polling cũng chính là một điển hình cho lập trình stateful nơi mà client và server luôn giữ kết nối và biết được trạng thái của nhau.
Vậy ưu điểm và nhược điểm của websocket là gì?
Ưu điểm
- Tất nhiên rồi, giao tiếp bất đồng bộ giữa client và server, làm tăng khả năng tương tác và trải nghiệm của người dùng, tăng hiệu năng và khả năng phản hồi của server
- Tận dụng lại được tất cả những gì mà HTTP có, từ luồng kết nối đến các giao thức mã hoá SSL
- Có thể sử dụng được cho tất cả các môi trường mà HTTP đã từng sử dụng, từ Browser cho đến Mobile cho đến các thiết bị IoT
Nhược điểm
- Thực tế websocket chỉ sử HTTP ở giai đoạn đầu, nó chỉ chiếm 1 phần bé xíu (kiểu 1 hạt cát trên biển) để khởi tạo kết nối, vậy mà chúng ta phải lôi cả một thư viện HTTP to đùng vào trong dự án của chúng ta, điều này khiến dung lượng của ứng dụng bị phình to, việc conflict thư viện cũng rất dễ xảy ra, nên nếu bạn đang cần làm một dự án nhỏ hoặc các dự án không liên quan đến web và bạn muốn tối ưu (ví dụ mình làm game) thì việc tự viết một socket server không phải là một ý tưởng tồi.
- Nếu chúng ta muốn đảm bảo HA (High Availability) thông qua LB (load balancer) chúng ta sẽ cần sử dụng một số kỹ thuật hoặc phải mua giải pháp (ví dụ Elastic LB của amazone). Vì một server (LB) thông thường chỉ có thể mở tối đa 65,536 port để kết nối đến Websocket server mà thôi.
- Lập trình với websocket không hề đơn giản, đòi hỏi chúng ta phải có hiểu biết nhiều hơn về lập trình mạng
Tổng kết
Websocket hiện tại không chỉ là một giao thức nữa, nó đã trở thành 1 lĩnh vực để mọi người cùng tham gia phát triển, mình tin rằng trong tương lai, các website hay các ứng dụng sẽ luôn có 1 cặp HTTP + Websocket (hoặc 1 giao thức socket nào khác) đi cùng nhau để tăng trải khả năng tương tác và nghiệm người dùng, từ đó tạo ra doanh thu và lợi nhuận lớn hơn. Vậy nên việc lập trình viên chúng ta biết đến websocket, có lẽ nên là điều bắt buộc.
Websocket là một chủ để rộng lớn, có lẽ cần đến hàng trăm bài viết mới có thể nói hết được, vậy cùng đón chờ nhé mọi người, 🙂
Tham khảo
- https://www.pubnub.com/blog/http-long-polling/
- https://tools.ietf.org/html/rfc6455
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade
- https://dzone.com/articles/load-balancing-of-websocket-connections
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội