.net socket.io客戶端使用過程

無知的小賊發表於2019-06-25

背景:最近做了一個專案,需要對接第三方介面,需要使用.net socket.io作為客戶端來收發指令。雖說socket.io並不難,但是使用過程中還是遇到一些問題,特此記錄一下。

先看socket.io介紹:Socket.io是一個WebSocket庫,包括了客戶端的js和伺服器端的nodejs,它的目標是構建可以在不同瀏覽器和移動裝置上使用的實時應用。它會自動根據瀏覽器從WebSocket、AJAX長輪詢、Iframe流等等各種方式中選擇最佳的方式來實現網路實時應用,非常方便和人性化,而且支援的瀏覽器最低達IE5.5(從中文官方文件那抄過來的...)

websocke之前在h5上用過,第三方也給了一個socket.io的js版本,我看了一下也挺簡單啊,那就直接在.net上試一下吧。

首先需要找相關程式集,一開始在nuget上面下載使用量最高的socketioclientdotnet 0.9.13,可是後邊測試傳送指令異常的慢,得有二三十秒,後來在nuget官網上找了一下歷史版本,換了一個高一些的版本1.0.0.1-beta1,當然通過nuget下載時一些依賴項也下載下來了。

接下來構造socket.io物件。

var options = new IO.Options();//配置項
string username = Guid.NewGuid().ToString();
options.QueryString = "username=user" + username;//引數
Socket socket = IO.Socket("http://127.0.0.1:6330", options);//例項化物件

這裡邊注意,構造socket.io時需要給第三方傳引數username,是通過options中的QueryString傳參的。

socket.io中預設初始化物件時就進行連線,所以不需要額外進行連線操作。

接下來是監聽 連線一些事件。

socket.On(Socket.EVENT, (data) =>
   {
                
    });

其中EVENT可以為:EVENT_CONNECT(監聽連線),EVENT_DISCONNECT(斷開連線),EVENT_CONNECT_ERROR(連線錯誤),EVENT_CONNECT_TIMEOUT(連線超時),EVENT_ERROR(錯誤)。

監聽訊息時:

socket.On("retransData", (data) =>
{
    
});

retransData為監聽訊息佇列。

傳送指令:

JObject sjo = new JObject();
socket.Emit("transData",  sjo);

傳送物件時jobject,表示向服務端transData佇列傳送訊息。

 

相關文章