1個jsp 客戶端(J)、1個C#程式(C)、多個C#功能實作程式(C01、C02....)。現需要J向C發送json格式請求,C程式中做轉發,根據json格式請求來判斷是轉發給C01還是C02,C01/C02處理完成后,再持續回傳給C,C再持續回傳給J。目前J和C01 C02...已實作,但對C還沒有思緒。請問轉發如何實作?
uj5u.com熱心網友回復:
麻煩的設計。這需要你每個端先“預訂”資料所以你們可以考慮直接用mq,Kafka,mqtt等中間件直接做
非要websockt的話,那你就只能是接受預訂,記著。然后轉發
uj5u.com熱心網友回復:
也就是說,你的C在目前的情況下,其實根本就不需要做。他的功能其實就是現有mq,mqtt的功能
uj5u.com熱心網友回復:
http://bbs.cskin.net/thread-18391-1-1.htmluj5u.com熱心網友回復:
之前是沒有C01和C02等,都是C控制獲取不同型別的設備,因為會出現某個設備例外,導致C的退出,所以要做拆分。C01獲取到資料要持續(持續是重點)回傳給C,C在持續回傳給J。目前發送:J-C-C01可以, C01回傳到C,C也可以接受,但是回傳不到J了。
webSocket4Net.MessageReceived += receiveData;//服務端回傳資料后,進入此方法(C在這個方法內接受,向J發的時候發不過去)
uj5u.com熱心網友回復:
之前是沒有C01和C02等,都是C控制獲取不同型別的設備,因為會出現某個設備例外,導致C的退出,所以要做拆分。C01獲取到資料要持續(持續是重點)回傳給C,C在持續回傳給J。目前發送:J-C-C01可以, C01回傳到C,C也可以接受,但是回傳不到J了。
webSocket4Net.MessageReceived += receiveData;//服務端回傳資料后,進入此方法(C在這個方法內接受,向J發的時候發不過去)
uj5u.com熱心網友回復:
對的哦,之所以說選型mqtt(我就推mqtt他,根據你們的東西,mqtt是最復合,也是相對最簡單的選型)
jsp:我不知道這個jsp是啥樣子的,因為jsp實際現在已經沒啥人用,但是如果是html端推呢,js有maqqjs成品庫,集成不需要30分鐘,如果是后端呢java也mqtt庫,集成也不會超過30分鐘
我給個請求的例子
jsp端
topic : Command/C01/Request
payload:{"引數":"xxxxxx"}
這里還有一個回傳topic: Command/C01/reponse/guid //這個guid是一個流水號,用來區別不同時刻的命令
訂閱. Command/C01/reponse/guid .處理訂閱(p=>取消訂閱)
發布上面參考的部分
沒有你的C端,你的C端完全可以拿掉
你的C1端
啟動時連接mqtt。同時訂閱Command/C01/Request
然后處理完畢,向封包資料里的回傳topic發送結果
你其他的C2,C3,Cn端都跟C1端處理一樣,只不過是訂閱的topic不同,C2就訂閱Command/C02/Request 就好
uj5u.com熱心網友回復:
一個免費版的mqtt brokeemqx
下載安裝不需要你半個小時,你只需安裝這個,就可以實作你要的C端的功能
uj5u.com熱心網友回復:
從你的回復來說,你其實說因為會死機所有采用多行程了。其實就是多行程通訊。為了簡化程序,實際你也可以直接使用多行程通訊手段,不用什么websocket中轉,因為你參考一下樓上mqtt,你會發現。如果你非要使用一個websocket進行中轉,他們你就必須要表明他的身份比如我知道,這個websocket進來的C1,這個是C2.
所以你看見了,mqtt用訂閱這個步驟來處理的,C1訂閱C1的訊息,所以我們知道C1的指令給C1 客戶端
所以如果簡化通訊,你可以直接用行程通訊手段,比如命名管道,我開一個命名管道 “IPC/comand/C1”我們用這個管道通訊
或者grpc不同的埠,比如“tcp:80001”是C01的,這樣他天然就分開了,不需要你轉發,你只需要做grpc請求就好
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/275312.html
標籤:C#
上一篇:通用增刪改的方法你們怎么寫的?
下一篇:這是哪兒出問題的呢?很嚴密啊?
