Unix Socket - Mô hình Máy chủ Máy khách
Hầu hết các Ứng dụng Mạng sử dụng kiến trúc Máy khách-Máy chủ, dùng để chỉ hai tiến trình hoặc hai ứng dụng giao tiếp với nhau để trao đổi một số thông tin. Một trong hai quy trình hoạt động như một quy trình khách và một quy trình khác hoạt động như một máy chủ.
Quy trình khách hàng
Đây là quá trình thường yêu cầu thông tin. Sau khi nhận được phản hồi, quá trình này có thể kết thúc hoặc có thể thực hiện một số xử lý khác.
Example, Trình duyệt Internet hoạt động như một ứng dụng khách, ứng dụng này sẽ gửi yêu cầu đến Máy chủ Web để lấy một trang web HTML.
Quy trình máy chủ
Đây là quá trình nhận yêu cầu từ khách hàng. Sau khi nhận được yêu cầu từ máy khách, quá trình này sẽ thực hiện xử lý theo yêu cầu, thu thập thông tin được yêu cầu và gửi đến máy khách người yêu cầu. Sau khi hoàn tất, nó sẽ sẵn sàng để phục vụ khách hàng khác. Các tiến trình của máy chủ luôn cảnh báo và sẵn sàng phục vụ các yêu cầu đến.
Example - Máy chủ Web tiếp tục đợi các yêu cầu từ Trình duyệt Internet và ngay khi nhận được bất kỳ yêu cầu nào từ trình duyệt, nó sẽ chọn một trang HTML được yêu cầu và gửi lại cho Trình duyệt đó.
Lưu ý rằng máy khách cần biết địa chỉ của máy chủ, nhưng máy chủ không cần biết địa chỉ hoặc thậm chí sự tồn tại của máy khách trước khi kết nối được thiết lập. Khi kết nối được thiết lập, cả hai bên đều có thể gửi và nhận thông tin.
Kiến trúc 2 tầng và 3 tầng
Có hai loại kiến trúc máy khách-máy chủ -
2-tier architecture- Trong kiến trúc này, máy khách tương tác trực tiếp với máy chủ. Loại kiến trúc này có thể có một số lỗ hổng bảo mật và các vấn đề về hiệu suất. Internet Explorer và Máy chủ Web hoạt động trên kiến trúc hai tầng. Ở đây các vấn đề bảo mật được giải quyết bằng cách sử dụng Lớp cổng bảo mật (SSL).
3-tier architectures- Trong kiến trúc này, một phần mềm nữa nằm giữa máy khách và máy chủ. Phần mềm trung gian này được gọi là 'middleware'. Phần mềm trung gian được sử dụng để thực hiện tất cả các kiểm tra bảo mật và cân bằng tải trong trường hợp tải nặng. Phần mềm trung gian nhận tất cả các yêu cầu từ máy khách và sau khi thực hiện xác thực được yêu cầu, nó sẽ chuyển yêu cầu đó đến máy chủ. Sau đó, máy chủ thực hiện xử lý theo yêu cầu và gửi phản hồi trở lại phần mềm trung gian và cuối cùng phần mềm trung gian chuyển phản hồi này trở lại máy khách. Nếu bạn muốn triển khai kiến trúc 3 tầng, thì bạn có thể giữ bất kỳ phần mềm trung gian nào như phần mềm Web Logic hoặc WebSphere ở giữa Máy chủ Web và Trình duyệt Web của bạn.
Các loại máy chủ
Có hai loại máy chủ mà bạn có thể có -
Iterative Server- Đây là dạng máy chủ đơn giản nhất trong đó một tiến trình máy chủ phục vụ một máy khách và sau khi hoàn thành yêu cầu đầu tiên, nó sẽ nhận yêu cầu từ máy khách khác. Trong khi đó, một khách hàng khác vẫn tiếp tục chờ đợi.
Concurrent Servers- Loại máy chủ này chạy nhiều tiến trình đồng thời để phục vụ nhiều yêu cầu cùng một lúc vì một quá trình này có thể lâu hơn và một máy khách khác không thể đợi quá lâu. Cách đơn giản nhất để viết một máy chủ đồng thời trong Unix là phân nhánh một quy trình con để xử lý từng máy khách riêng biệt.
Làm thế nào để tạo khách hàng
Hệ thống gọi thiết lập kết nối hơi khác nhau đối với máy khách và máy chủ, nhưng cả hai đều liên quan đến cấu trúc cơ bản của một ổ cắm. Cả hai quy trình đều thiết lập các ổ cắm riêng của chúng.
Các bước liên quan đến việc thiết lập một ổ cắm ở phía máy khách như sau:
Tạo một ổ cắm với socket() cuộc gọi hệ thống.
Kết nối ổ cắm với địa chỉ của máy chủ bằng cách sử dụng connect() cuộc gọi hệ thống.
Gửi và nhận dữ liệu. Có một số cách để làm điều này, nhưng cách đơn giản nhất là sử dụngread() và write() các cuộc gọi hệ thống.
Cách tạo Máy chủ
Các bước liên quan đến việc thiết lập một ổ cắm ở phía máy chủ như sau:
Tạo một ổ cắm với socket() cuộc gọi hệ thống.
Liên kết ổ cắm với một địa chỉ bằng cách sử dụng bind()cuộc gọi hệ thống. Đối với ổ cắm máy chủ trên Internet, địa chỉ bao gồm số cổng trên máy chủ.
Lắng nghe các kết nối với listen() cuộc gọi hệ thống.
Chấp nhận kết nối với accept()cuộc gọi hệ thống. Cuộc gọi này thường chặn kết nối cho đến khi một máy khách kết nối với máy chủ.
Gửi và nhận dữ liệu bằng cách sử dụng read() và write() các cuộc gọi hệ thống.
Tương tác giữa máy khách và máy chủ
Sau đây là sơ đồ cho thấy toàn bộ sự tương tác giữa Máy khách và Máy chủ: