畢業一年多了,不多寫點什麼東西。自從進入如今的公司,就主要負責淘寶應用的項目,從開始的沒據說過,到如今瞭解一二,一路摸爬滾打,苦逼的生活歷歷在目。json
最開始的時候也百度谷歌,在CSDN上問個問題,留了個QQ後,也有好幾我的來問我淘寶主動通知的實現(那時我已經知道怎麼實現了),今天又有人來問我,索性寫點東西分享給你們。這裏吐槽一下淘寶的開放平臺,sdk(老版本)裏面都沒看到註釋,徹底憑本身理會,去只是中心提問,支持中心的人讓你看文檔,好像別個不看文檔似的。不過新版本有了註釋了。好了,進入正題:api
主動通知,就是淘寶主動發消息給你,前提是你實現了它的接口。服務器
先在http://api.taobao.com/myresources/mySdk.htm?appkey=21612266下載好sdk,我下的是標準版的.net的,你也能夠根據本身訂購的消息下載對應的sdk。app
爲方便講解,建個控制檯的項目,引用下載的TopSdk.dll,右鍵項目屬性,將應用程序的目標框架改成.NET Framework 4框架
新建個TaoSession類測試
1 public class TaoSession : IConnectionLifeCycleListener, ITopCometMessageListener 2 { 3 #region 鏈接接口實現 4 public void OnBeforeConnect() 5 { 6 Console.WriteLine("Before Connect..."); 7 } 8 9 public void OnConnect() 10 { 11 Console.WriteLine("Connect..."); 12 } 13 14 public void OnConnectError(Exception e) 15 { 16 throw new NotImplementedException(); 17 } 18 19 public void OnException(Exception throwable) 20 { 21 throw new NotImplementedException(); 22 } 23 24 public void OnMaxReadTimeoutException() 25 { 26 throw new NotImplementedException(); 27 } 28 29 public void OnReadTimeout() 30 { 31 Console.WriteLine("Time Out!"); 32 } 33 34 public void OnSysErrorException(Exception e) 35 { 36 throw new NotImplementedException(); 37 } 38 #endregion 39 40 #region 消息接口實現 41 public void OnClientKickOff() 42 { 43 throw new NotImplementedException(); 44 } 45 46 public void OnConnectMsg(string message) 47 { 48 Console.WriteLine(DateTime.Now.ToString() + ":Connected..."); 49 } 50 51 public void OnConnectReachMaxTime() 52 { 53 throw new NotImplementedException(); 54 } 55 56 public void OnDiscardMsg(string message) 57 { 58 // 丟棄了的消息 59 Console.WriteLine(DateTime.Now.ToString() + ":DiscardMsg..."); 60 } 61 62 public void OnHeartBeat() 63 { 64 // 接受心跳包 65 Console.WriteLine(DateTime.Now.ToString() + ":HeartBeat..."); 66 } 67 68 public void OnOtherMsg(string message) 69 { 70 // 其餘消息 71 Console.WriteLine(DateTime.Now.ToString() + ":Other message..."); 72 } 73 74 public void OnReceiveMsg(string message) 75 { 76 try 77 { 78 // 接受到的消息 79 Console.WriteLine("Receives a message..."); 80 81 // 輸出消息 82 Console.WriteLine("接受到的消息:" + message); 83 84 // 解析消息 85 //object obj = MessageDecode.DecodeMsg(message); 86 } 87 catch (Exception e) 88 { 89 Console.WriteLine("處理消息時出錯了···"); 90 } 91 } 92 93 public void OnServerKickOff() 94 { 95 throw new NotImplementedException(); 96 } 97 98 public void OnServerRehash() 99 { 100 throw new NotImplementedException(); 101 } 102 103 public void OnServerUpgrade(string message) 104 { 105 // 淘寶服務器在升級 106 Console.WriteLine("Taobao Server is Upgrade!"); 107 } 108 #endregion 109 }
而後Program.cs開始啓動監聽spa
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 // 淘寶的appkey和appsecret,申請就有了 6 string appkey = "", appsecret = ""; 7 // 沙箱環境的監聽地址 8 string taotaoListenerUrl = "http://stream.api.tbsandbox.com/stream"; 9 10 Configuration conf = new Configuration(appkey, appsecret, null); 11 conf.SetConnectUrl(taotaoListenerUrl); 12 13 ITopCometStream stream = new TopCometStreamImpl(conf); 14 15 stream.SetConnectionListener(new TaoSession()); 16 stream.SetMessageListener(new TaoSession()); 17 18 stream.Start(); 19 20 // 中止 21 //stream.Stop(); 22 } 23 }
這樣就能夠接受到淘寶的消息了,看起來很簡單,具體的消息怎麼處理,仍是根據不一樣的業務來定,還要將接收到的消息解析(json格式),淘寶開放平臺有提供解析的類.net
上圖沙箱環境測試的,HeartBeat爲心跳,接受到的是沙箱發貨的消息,忘了補充:要接受消息,先要在應用設置的主動通知管理訂閱消息code