元件的Webapi控制器不但可以被Http調用,同時也支援Websocket調用。是以服務啟動後相關的Webapi控制器是采用那種方式調用則取決于用戶端使用那種方式。
啟動服務
首先需要引用BeetleX.FastHttpApi元件,引用後即可定義相關服務.
static void Main(string[] args){ HttpApiServer server = new HttpApiServer(); server.Options.SetDebug(); server.Register(typeof(Program).Assembly); server.Options.Port = 80; server.Options.LogLevel = EventArgs.LogType.Info; server.Options.LogToConsole = true; server.Open(); System.Threading.Thread.Sleep(-1);}
由于控制器是元件内置功能,是以無須再定義WebSocketReceive事件來接管相關處理。
控制器定義
元件定義控制器非常簡單,詳細可以檢視元件的Webapi控制器定義.
[Controller]public class Home{ public string Hello(string name) { return $"Hello {name} {DateTime.Now}"; }}
以上定義一個Hello方法,通路路徑/hello.
Web調用
為了友善調需要引用axios.js和beetlex4axios.js兩個腳本檔案,通過beetlex4axios可以支援http和websocket通路控制器。
<div id="app"> <div> Name: <input type="text" v-model="name" /> <button @click="doSend">發送button> div> <div> <p v-for="item in items">{{item}}p> div> div> <script> var page = new Vue({ el: '#app', data: { hello: new beetlexAction('/hello'), items: [], name: '', }, methods: { doSend() { this.hello.asyncpost({ name: this.name }).then(r => { this.items.push(r); }); }, } });script>
beetlex4axios.js通過beetlexAction對象定義一個控制器通路對象,方法提供asyncpost和asyncget方法,在調用時候依據控制器參數配置即可。針對websocket方法來說asyncpost和asyncget是沒有差別的。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOyADZzcTZmJWMmBjM5IzN0I2N5cDMyU2N1UjNyMmNh9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
由于beetlex4axios.js預設是沒有開啟websocket的,是以測試請求是http.接下來啟用一直websocket.
<div id="app"> <div> Name: <input type="text" v-model="name" /> <button @click="doSend">發送button> div> <div> <p v-for="item in items">{{item}}p> div> div> <script> var page = new Vue({ el: '#app', data: { hello: new beetlexAction('/hello'), items: [], name: '', }, methods: { doSend() { this.hello.asyncpost({ name: this.name }).then(r => { this.items.push(r); }); }, }, mounted() { beetlex.useWebsocket(); } });script>
通過調用beetlex.useWebsocket();方法來開啟Websocket,開啟後調用就即是Websocket通路。
開啟後就可以在浏覽器查詢對應的Weboskcet message資訊,通過這些資訊相信能了解到控制調用的資料是怎樣打包的,隻要通過websocket的基礎對象打包對應的請求json資料也可以實作控制器調用。
下載下傳示例
連結:
https://pan.baidu.com/s/1_5qaOq4U3CwLI3wLvDkltQ
提取碼:
br20
【BeetleX通訊架構代碼詳解】
【WebApi示例擴充】
BeetleX
開源跨平台通訊架構(支援TLS)
輕松實作高性能:tcp、http、websocket、redis、rpc和網關等服務應用
https://beetlex.io
如果你想了解某方面的知識或文章可以把想法發送到
[email protected]|[email protected]