2008-10-30 36 views
5

Giả sử bạn đang viết một ứng dụng phải triển khai giao thức HTTP. Giao thức khá phức tạp và có thể cho phép một số lệnh tùy thuộc vào giai đoạn của giao dịch mà họ đang sử dụng.Cách tốt nhất để thực hiện các giao thức là gì?

Ví dụ: xem SMTP. Máy chủ SMTP phải gửi lỗi nếu lệnh "dữ liệu" được gửi trước khi nhận "rcpt" và "mail".

Câu hỏi của tôi là: cách tốt nhất để xử lý các giao thức như mã này là gì? Có bất kỳ mẫu thiết kế nào liên quan đến điều này không?

Chỉnh sửa: Câu hỏi này liên quan đến lý thuyết đằng sau việc triển khai giao thức. Tôi biết rằng việc sử dụng thư viện là cách tiếp cận tốt nhất trong thực tế.

Trả lời

12

State Machines

Để tâm trí của tôi, một máy nhà nước là cách dễ nhất để mô hình hóa và xử lý các giao thức. Một trạng thái sẽ đạt được bằng một số hiệu ứng chuyển tiếp liên quan đến các lệnh hợp lệ nhận được. Mỗi tiểu bang sau đó sẽ chỉ cho phép một tập hợp con các lệnh nhất định.

Máy trạng thái được sử dụng trong xây dựng trình biên dịch để phân tích từ vựng của một chương trình. Tôi thấy vấn đề thực hiện giao thức như là một trường hợp đặc biệt này.

1

Cách tốt nhất để xử lý các giao thức như thế này là sử dụng thư viện. Hầu như mọi ngôn ngữ máy tính được sử dụng trên trái đất đều có từ trước, các thư viện được kiểm tra tốt để xử lý http và smtp.

+1

Trừ khi bạn muốn phát triển trình xử lý giao thức dưới dạng tập thể dục, đây là lời khuyên hữu ích. Các thư viện này là chung chung và có xu hướng được kiểm tra tốt. Hãy xem thư viện chuẩn Python để biết ví dụ về hiện tượng này. – ConcernedOfTunbridgeWells

+0

Cảm ơn. Câu hỏi của tôi liên quan nhiều hơn đến cách thực hiện chúng như một câu hỏi lý thuyết. Tôi có cần phải sử dụng chúng trong thực tế tôi chắc chắn sẽ sử dụng một thư viện. – fluffels

-1

Tôi đồng ý với A28, cách tốt nhất là một trong hai:

  • Sử dụng một thư viện mà thực hiện các máy chủ giao thức
  • Viết ứng dụng của bạn như một phần mở rộng đến một máy chủ hiện có (ví dụ như mở rộng máy chủ web thông qua IIS , API Apache, v.v. Sendmail Milter, v.v. HOẶC
  • Sửa đổi máy chủ hiện có để thực hiện cuộc gọi RPC với ứng dụng của bạn khi ứng dụng nhận được yêu cầu.

Viết triển khai giao thức của riêng bạn có thể dẫn đến việc triển khai lỗi với các vấn đề về khả năng tương tác.

Một công cụ thú vị để thực hiện điều này là twisted là python cụ thể nhưng khá thông minh và bao gồm việc triển khai nhiều giao thức hiện có (HTTP, SMTP, IRC, v.v.).

Các vấn đề liên quan