2009-02-05 14 views
7

Để thực hiện một ứng dụng mạng sử dụng multicast để gửi các tin nhắn định kỳ nhỏ đến các quy trình khác trong mạng, tôi có những lựa chọn nào liên quan đến việc sử dụng các API trong khuôn khổ .Net? Ngoài sự lựa chọn rõ ràng hiện tại của tôi, API System.net.sockets, WCF có cung cấp cách tiếp cận đơn giản hơn không? Hay WCF hoàn toàn là một cơ chế IPC dựa trên điểm-điểm-điểm?Hỗ trợ đa hướng trong .Net

Lưu ý: Tôi khá thông thạo với các chi tiết triển khai lập trình đa phương tiện. Điều tôi thích nghe là những lựa chọn khác mà khung công tác .Net cung cấp.

Trả lời

2

Bạn chỉ cần tạo UDPClient và gửi dữ liệu đến địa chỉ phát đa hướng (224/4, đó là bất kỳ địa chỉ nào từ 224.0.0.0 đến 239.255.255.255).

Khách hàng của bạn chỉ cần nghe địa chỉ này như bình thường.

Xem câu trả lời của tôi here để biết thêm chi tiết.

P.S. Mặc dù WCF khá là quá mức cần thiết cho một tác vụ đơn giản như vậy, nó hoàn toàn có thể với WCF. Có khác nhau Message Exchange Patterns ở đó, i. e. các cách truyền thông chảy.

Những gì bạn cần là IOutputChannel cho người gửi và IInputChannel cho người nghe, đây là các mẫu định hướng datagram.

0

WCF là thực sự nặng cho những gì bạn muốn làm.

Đặt cược tốt nhất của bạn thực sự đang sử dụng datagram trong ổ cắm api. Họ không phải là quá đáng sợ khi bạn có được đầu của bạn xung quanh API, nhưng nó chắc chắn không phải là người thân thiện nhất có sẵn.

Tính năng đa truyền đạt được thông qua địa chỉ được gửi đến miễn là quản trị viên ISP/Mạng của bạn cho phép dữ liệu đa hướng. WCF vốn không cho phép nhiều mục tiêu AFAIK, khi bạn tạo proxy, bạn phải trỏ nó vào IP (có thể là địa chỉ multicast)

+0

WCF có hỗ trợ rõ ràng giao tiếp kiểu đa phương tiện không?Có một số tài liệu về điều này mà tôi có thể xem? – Mystic

+0

Như tôi đã nói, multicast là tài sản của Giao thức Internet, không phải của WCF hoặc bất kỳ thư viện nào khác. Đó là quản trị viên mạng/ISP để xác định có hỗ trợ phát đa hướng hay không. Tôi không tin rằng bạn có thể ghi vào địa chỉ multicast bằng TCP, vì vậy WCF sẽ không thể thực hiện được: ( – Spence

+0

Tôi chắc chắn WCF hỗ trợ UDP. –

2

Tôi sẽ đề xuất sử dụng các kênh gọi lại (ví dụ: pub/sub loại hệ thống) được thực hiện trong WCF, nhưng điều đó sẽ yêu cầu khách hàng của bạn đăng ký với 'máy chủ'.

Tôi sau đó sẽ đề cập đến các giải pháp nhắn tin cấp doanh nghiệp như Tibco EMS (triển khai JMS).

Sau đó, tôi nhấn vào google và tìm thấy liên kết này: WCF Multicasting. Có rất nhiều ý tưởng trên đó mà tôi đã không đi qua trong cái nhìn đầu tiên của riêng tôi tại WCF.

+0

Tôi đã xem liên kết cuối cùng trước đó và đặc biệt là đọc về PeerChannels, nhưng sau đó quyết định rằng nó là tất cả một chút quá nhiều cho một cái gì đó đơn giản mà tôi đã cố gắng để thực hiện.Perchannels có vẻ lý tưởng cho việc thực hiện các mạng P2P. – Mystic

0

FWIW, câu hỏi ban đầu của bạn được hỏi cụ thể liệu WCF có thể đạt được mục tiêu của bạn hay không. Như Quassnoi đã chỉ ra trước đó bạn chắc chắn có thể làm điều này bằng cách sử dụng WCF. Trong khi hầu hết các tài liệu về WCF tập trung xung quanh cách bạn sử dụng mô hình hợp đồng của nó, nó có thể và chính đáng để chỉ sử dụng mô hình kênh và cấu trúc ràng buộc.

Nếu bạn triển khai IOutputChannel và IInputChannel, bạn có thể tạo kênh dựa trên datagram của riêng mình. Điều này có được cung cấp như một phần của khung không (và tôi nghĩ đây cũng là cốt lõi cho câu hỏi của bạn). Tuy nhiên, Microsoft đã cung cấp một mẫu của một giao UDP (mà họ yêu cầu hỗ trợ multicast). Bạn có thể tìm thấy mẫu của họ tại URL sau:

http://msdn.microsoft.com/en-us/library/ms751494.aspx