Bài viết giới thiệu 2 khái niệm Server và Client trong lập trình. Ngoài ra 2 khái niệm này cũng là khái niệm chung cho các lĩnh vực khác và có ý nghĩa tương tự.
Ngữ nghĩa của Server và Client
Từ tiếng Anh dịch sang tiếng Việt có thể hiểu:
- Server là 1 thành phần cung cấp dịch vụ.
- Client thừa hưởng các dịch vụ này.
Server và Client đề cập trong bài này
Khi nhận được 1 yêu cầu thì thành phần yêu cầu sẽ là Client. Trong lập trình 1 hàm cần sử dụng 1 hàm khác như yêu cầu 1 hàm trả về tổng của 2 số nguyên:
#include <iostream> void sum(int a, int b) { int c = a + b; std::cout << c; } /* int main() { sum(5, 10); } */
Yêu cầu hàm cần tính tổng 2 số, khi sử dụng hàm không nhận được kết quả này, sum(int, int)
là 1 "server" nhưng cung cấp dịch vụ chưa ổn do không trả về kết quả, Client trong trường hợp này là nơi gọi hàm sum(int, int)
trong hàm main()
không lấy được kết quả từ hàm sum()
.
Đoạn code trên nên được điều chỉnh lại để server cung cấp dịch vụ đúng đắn hơn:
int sum(int a, int b) { int c = a + b; return c; }
Các ví dụ khác về server và client
Trong lập trình hướng đối tượng, xét ví dụ kế thừa kiểu public
/* SERVER CODE */ class Community { private: int att1; protected: int att2; public: void Share() { } }; /* KẾ THỪA KIỂU PUBLIC */ class Stdio: public Community { private: int att3; public: void ShareArticle() { } }; /* CLIENT CODE int main() { Stdio obj; } */
class Community
là server code củaclass Stdio
.class Stdio
là server code của khai báoStdio obj
trong hàmmain()
.
Các số chẵn trong một mảng
#include <iostream> void GetEvenIntegerList(int* integerList, int n) { for (int i = 0; i < n; n++) { if (integerList[i] % 2 == 0) { std::cout << integerList[i]; } } }
Server code này đã không thỏa mãn lắm chức năng Server, các Client không thể sử dụng được dịch vụ này, cụ thể là không nhận được danh sách số chẵn như mong đợi. Cải tiến lại như sau:
void GetEvenIntegersList(int* integerList, int n, int*& eIntegerList, int &m) { // ĐẾM SỐ LƯỢNG SỐ CHẴN CÓ TRONG DANH SÁCH m = 0; for (int i = 0; i < n; i++) { if (integerList[i] % 2 == 0) { m++; } } if (m == 0) return; // KHỞI TẠO MẢNG ĐỦ ĐỂ CHỨA LƯỢNG SỐ CHẴN ĐÃ ĐẾM int* eIntegerList = new int[m]; int k = 0; for (int i = 0; i < n; i++) { if (integerList[i] % 2 == 0) { eIntegerList[k++] = integerList[i]; } } }
Hiện thực đúng đắn một Server sẽ đòi hỏi nhiều kỹ năng hơn, lâu dài sẽ tạo nên một khả năng "đóng gói" sản phẩm, dịch vụ mà người dùng hoặc client nói riêng chỉ cần "plug-and-play". Không chỉ tiện lợi, tăng độ tin cậy cho sản phẩm mà còn tăng uy tín cho người hiện thực.