-
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!
- 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

Vô cùng quan trọng
Socket hay lập trình mạng là một trong những lĩnh vực quan trọng bậc nhất và cũng thú vị bậc nhất trong lĩnh vực công nghệ thông tin. Nếu không có socket, chúng ta đã không có mạng internet như ngày nay, không có client, không có server, không có livestreaming, IOT, gần như chúng ta sẽ không có gì cả ngoài chiếc máy tính nhàm chán.
Không dễ để tạo ra
Lập trình socket là một lĩnh vực vô cùng khó khăn và phức tạp, nhưng ngày nay chúng ta lại chỉ biết đến phần ngọn thông qua các thư viện open source như Netty hay các thư viện vô cùng đắt đỏ như Smartfoxserver hay Photon server hay những dịch vụ cloud như firebase. Bạn thấy đó, mọi chuyện không hề đơn giản.
Để tạo được ra các thư viện lập trình socket, đòi hỏi chúng ta phải biết rất nhiều thứ từ mạng máy tính, các giao thức cho đến các kỹ thuật lập trình.
Mô hình mạng 7 lớp

Mô hình OSI (Open Systems Interconnection Reference Model) là một cách thức để mô tả nguyên lý hoạt động của hạ tầng mạng ngày nay. Mô hình OSI sắp xếp một giao thức với chức năng của nó vào một hoặc một nhóm các lớp tương ứng. Mỗi một tầng cấp có một đặc tính là nó chỉ sử dụng chức năng của tầng dưới nó, đồng thời chỉ cho phép tầng trên sử dụng các chức năng của mình. Mô hình OSI được coi như một mô hình tiêu chuẩn dùng để tham chiếu và giảng dạy trong lập trình mạng, còn trong thực tế các nhà cung cấp thiết bị mạng có lập trình cho thiết bị của họ theo mô hình này không thì mình cũng không rõ, :), còn với mình khi đi lập trình ezyfox socket server mình cũng cần tham khảo mô hình này rất nhiều.
2 giao thức quan trọng
Mặc dù có tới 7 tầng với rất nhiều giao thức, nhưng khi lập trình socket chúng ta sẽ chỉ cần quan tâm chính đến 2 giao thức ở tầng 4 đó là TCP và UDP
TCP
TCP (Transmission Control Protocol) là giao thức gửi tin có đảm bảo, nghĩa là giao thức này sẽ đảm bảo cho chúng ta sẽ gửi bằng được gói tin đến đích (cho đến đến khi timeout), và các gói tin sẽ được gửi nhận theo thứ tự. Có rất nhiều giao thức được xây dựng dựa trên TCP, phổ biến nhất phải kể đến HTTP và Websocket
UDP
UDP (User Datagram Protocol) là giao thức truyền tin không đảm bảo. Nghĩa là nó không đảm bảo việc gói tin có gửi được đến đích hay không, nhưng điểm rất hay của nó là không yêu cầu phải tạo kết nối giữa client và server. Chúng ta có thể sử dụng giao thức này cho các ứng dụng đòi hỏi tốc độ gửi nhận gói tin nhanh và không yêu cầu độ tin cậy cao. Các ứng dụng phổ biến sử dụng UDP đó là livestreaming, VoIP, hay DNS (Domain Name System).
Các kỹ thuật cần thiết

Lập trình socket yêu cầu rất nhiều kỹ thuật khó, đòi hỏi chúng ta phải bỏ rất nhiều thời gian, công sức để tìm hiểu và phải làm chủ được nó.
Lập trình đa luồng
Đương nhiên rồi, trong một chương trình sử dụng socket có rất nhiều luồng: đọc, ghi dữ liệu, xử lý request, quản lý session, chính vì vậy mà không thể không sử dụng đa luồng
Serialize/Deserialize dữ liệu
Dữ liệu gửi nhận qua socket đều là byte bit, chính vì vậy để có thể lập trình ở mức application, chúng ta cần phải biến đổi từ dạng byte bit về các đối tượng mà chúng ta hay sử dụng, từ đó chúng ta mới có thể xử lý được request/response được gửi nhận. Hiện tại có một số giao thức hỗ trợ serialize và deserialize rất mạnh như Protobuf, MsgPack hay các giao thức sử dụng JSON.
Design pattern
Lập trình socket sử dụng rất nhiều design pattern khác nhau như template method, observer, command, bridge, adapter, proxy hay singleton design pattern. Phải sử dụng các design pattern thì chúng ta mới có thể kết nối và vận chuyển dữ liệu giữa các tầng với nhau được
Bảo mật thông tin
Việc gửi nhận dữ liệu thông qua mạng internet chưa bao giờ là an toàn. Chính vì vậy chúng ta cần biết thêm về các kỹ thuật để đảm bảo an toàn thông tin cho người sử dụng như: kỹ thuật mã hoá RSA, AES, kỹ thuật kiểm tra toàn vẹn gói tin, vân vân và mây mây
Kết luận
Lập trình socket là một lĩnh vực vô cùng phức tạp nhưng cũng rất hay ho (đặc biệt là lĩnh vực lập trình game server hay livestreaming) vậy nên không thể trong một bài viết mà có thể nói hết mọi thứ được, cùng chờ đón một loạt bài viết về socket mọi người nhé.
Tham khảo
-
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!
- 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