第一部分引用於:點擊打開html
PUB-SUB模式通常處理的都不是系統的關鍵數據。發佈者不關注訂閱者是否收到發佈的消息,訂閱者也不知道本身是否收到了發佈者發出的全部消息。你也不知道訂閱者什麼時候開始收到消息。相似於廣播,收音機。所以邏輯上,它都不是可靠的。這個能夠經過與請求響應模型組合來解決。app
圖1:簡單的發佈訂閱模式tcp
圖2:與請求響應模式組合的發佈訂閱模式測試
2:案例google
定義IPublishser接口spa
Publisher實現類3d
namespace NetMQDemoPublisher { public class Publisher:IPublisher { private object _lockObject = new object(); private PublisherSocket _publisherSocket; public Publisher(string endPoint) { _publisherSocket = new PublisherSocket(); _publisherSocket.Options.SendHighWatermark = 1000; _publisherSocket.Bind(endPoint); } #region Implementation of IDisposable /// <summary> /// 執行與釋放或重置非託管資源相關的應用程序定義的任務。 /// </summary> public void Dispose() { lock (_lockObject) { _publisherSocket.Close(); _publisherSocket.Dispose(); } } /// <summary> /// 發佈消息 /// </summary> /// <param name="topicName">主題</param> /// <param name="data">內容</param> public void Publish(string topicName, string data) { lock (_lockObject) { _publisherSocket.SendMoreFrame(topicName).SendFrame(data); } } #endregion } }
Publisher窗口界面code
界面中實現的功能代碼orm
定義ISubscriber接口htm
Subscriber實現類
Subscriber窗口界面
窗體功能代碼
namespace NetMQDemoSubscriber { public partial class SubscriberForm : Form { private ISubscriber subscriber; public SubscriberForm() { InitializeComponent(); } private void SubscriberForm_Load(object sender, EventArgs e) { subscriber = new Subscriber("tcp://127.0.0.1:8888"); subscriber.RegisterSbuscriberAll(); subscriber.Nofity+= delegate(string s, string s1) { ListViewItem item = new ListViewItem(string.Format("topic:{0},Data:{1}", s, s1)); listView1.Items.Add(item); }; } } }
運行後,Publiser開啓一個,Subscirber開啓三個,進行測試如圖
若是以爲文章好,記得關注一下公衆號喲!