2009-04-21 29 views
5

khác biệt, lợi thế và bất lợi giữa remoting và socket ... là cách tốt nhất cho chức năng Máy chủ-Máy khách ....remoting vs socket

Trả lời

11

Ổ cắm là luồng nhị phân thô giữa hai điểm cuối. Bạn sẽ cần phải bọc lớp RPC của bạn để xử lý các thông điệp và xử lý rất nhiều mã cơ sở hạ tầng. Tuy nhiên, vì chúng rất gần với kim loại nên nó có thể rất, rất hiệu quả. Nó không được gắn với bất kỳ kiến ​​trúc cụ thể nào, miễn là cả hai đầu đều có cùng một định dạng tin nhắn. Các công cụ như protobuf-net có thể giúp bạn xây dựng các thông điệp nhị phân cho các luồng (thay vì tung mã tuần tự hóa của riêng bạn).

Remoting là một công cụ cụ thể .NET và rất dễ sử dụng. Tôi sẽ không khuyên bạn nên remoting cho khách hàng/máy chủ - sử dụng những thứ như WCF để thay thế.

WCF là một ngăn xếp linh hoạt hơn - rất nhiều quyền lực và độ phức tạp, nhưng cho là một chút sưng lên quá (xml, bảo mật phức tạp, v.v.). Đó là hợp đồng dựa trên dữ liệu, do đó, khoảng mở (máy khách/máy chủ có thể khác nhau), nhưng vẫn tập trung vào một chút.


chỉnh sửa Đối với thông tin, protobuf-net cung cấp một đống RPC quá; tại thời điểm này chỉ có một thực hiện HTTP được cung cấp, nhưng tại một số điểm tôi sẽ thêm TCP/IP thô.

+0

Và đối với "tốt nhất" ... tùy thuộc vào các yêu cầu ;-p –

+0

+1 cho WCF. Và nếu bạn không có.net clients sử dụng WCF để trưng ra các dịch vụ web SOAP hoặc REST. Trường hợp từ xa tinh khiết đang nhanh chóng biến mất. –

2

Tôi thứ hai nhất mà Marc Gravell viết - đặc biệt từ xa và serialization nội bộ là "dễ" nhưng rất dễ phá vỡ và thường không quy mô tốt với mạng công cộng (tôi không quen với việc từ xa .net, nhưng Tôi đoán nó cần một dịch vụ đăng ký nổi tiếng mà thường là vấn đề khi đi ra khỏi môi trường phòng thí nghiệm sạch).

Việc triển khai RPC chuẩn hoặc thậm chí của riêng bạn khó hơn nhưng an toàn hơn trong thời gian dài: bạn không gặp vấn đề với sửa đổi mã (hoặc dễ kiểm soát hơn), quy mô được kiểm soát hoàn toàn bằng mã của riêng bạn, và dễ dàng phát triển các thành phần sử dụng các công nghệ khác nhau. Có rất nhiều công cụ giúp bạn dễ dàng xây dựng cơ chế RPC qua ổ cắm, nhưng tôi thực sự thích sử dụng HTTP cũ đơn giản - có một máy chủ nhúng HTTP đơn giản chạy bên trong quy trình máy chủ của bạn và máy khách của bạn chỉ cần có HTTP khách hàng để gửi tin nhắn. Nếu bạn phát triển ngữ nghĩa gọi RESTful đơn giản của riêng mình (thay vì sử dụng một số định dạng nhắn tin cồng kềnh như SOAP hoặc XML-RPC), thì thực sự không có gì để làm :-)

1

Tôi sẽ nói rằng lựa chọn giữa ổ cắm và điều khiển từ xa bạn xem xét tốt hơn về loại ứng dụng bạn đang phát triển. Ổ cắm chắc chắn cho việc triển khai giao thức của riêng bạn, lập trình cấp thấp và cách duy nhất để đi nếu bạn phải giao tiếp với các ứng dụng tcp/ip khác. Remoting là một cách được tạo sẵn để phát triển các ứng dụng giao tiếp .NET mới, nơi bạn không cần phải truy cập tcp/ip stack và đảm bảo ứng dụng của bạn nói chuyện với những người khác (có thể là các ứng dụng kế thừa). Trong trường hợp bạn chỉ có thể sử dụng .NET thì tốt hơn nên chọn .NET 3.5 và WCF thay vì .net 2.0 remoting, cái cuối cùng là công nghệ chết và không được hỗ trợ.

3

Thao tác ổ cắm trực tiếp có thể cung cấp cho bạn nhiều quyền lực, tính linh hoạt, hiệu suất và độ phức tạp không may khi so sánh với Từ xa hoặc WCF. Tuy nhiên, nếu bạn cần các lợi ích của TCP/IP cấp thấp, chẳng hạn như IO không chặn và các giao thức tùy chỉnh, các công cụ như Ragel và các khung công tác như Mina có thể làm giảm gánh nặng phức tạp. Tôi khuyên bạn nên thử các API cấp cao hơn như WCF trước tiên và chỉ sử dụng các ổ cắm trực tiếp nếu chúng không đáp ứng nhu cầu của bạn.