iT邦幫忙

0

SingalR 實現WebSocket 即時聊天室遇到離奇事件

  • 分享至 

  • xImage

事情是這樣的!!
我正在實作WebSocket即時聊天室,然後想把User的ConnecetionId存在DB
但是在過程中發生我每按一次WorkBench的執行
Client端的網頁就會重新整理一次,這樣就會導致ConnecetionId再重新生產一次

我目前找到的資訊是和WebSocket的雙向溝通機制有關?
不太確定所以上來請教大神/images/emoticon/emoticon20.gif

看更多先前的討論...收起先前的討論...
A10866009 iT邦新手 5 級 ‧ 2024-06-30 08:07:38 檢舉
那個他本來就是隨機的。
柴柴 iT邦新手 4 級 ‧ 2024-06-30 19:52:07 檢舉
ConnecetionId是隨機的我能理解,但是為啥WorkBench的“執行”按一次,前端的html網頁就會重新整理一次@@
froce iT邦大師 1 級 ‧ 2024-07-01 10:18:53 檢舉
我沒C#的實作經驗,不過正常來說,如果沒實作其他的認證機制,websocket經過前端重新整理,就要重新連線,然後給出的就是新連線。
一般 WebSocket 的原理。
就是在載入頁面時,要先連接好 WebSocket 。之後就開始進行溝通。
每一次的連接,都會有不同的連接ID。

重新整理這樣的動作。其實會造成 WebSocket 中斷。
所以在重新整理完之後,你還是會再重新觸發一個新的連接。
畢竟原本的連接已經斷了。

這樣的說明,不知道你是否清楚?
柴柴 iT邦新手 4 級 ‧ 2024-07-01 15:20:23 檢舉
網頁重新整理,會造成 WebSocket 中斷,Id就會重新產生。
以上我都能理解。

但是為啥DB 的介面執行 select * from table ,這時候前端的網頁也會重新整理呢,莫非是WebSocket 也跟著中斷了嗎
froce iT邦大師 1 級 ‧ 2024-07-01 15:46:58 檢舉
這你可能要查查你的工具有沒有什麼hot reload之類的功能。
[ 但是為啥DB 的介面執行 select * from table ,這時候前端的網頁也會重新整理呢,莫非是WebSocket 也跟著中斷了嗎]

這個要從兩方面來看

一種是,你可能程式碼有做了 WebSocket 對應發送。
畢竟這也是 WebSocket 主要的功能之一。
但可能你沒寫好,比較常見的問題就是。再對應發送時,又做了一次 WebSocket 啟動。然後如果你前端又有做斷線重載的話。
就會發生你說的事。

另外一種則是保護性重載。
如果傳送的資料異常的大。很常會發生這樣的事。
WebSocket 可以說算是一種服務。會常駐在你的SERVER上。
所以當主機負載達到一定量。
有時會造成 WebSocket 中斷的情況。

當然,因為你給的資訊不太明確。我也只能給你可能性的方向而已。
實際情況還是得靠你DEBUG一下了。
柴柴 iT邦新手 4 級 ‧ 2024-07-02 20:01:45 檢舉
感謝各位以上的回答,我大概有個方向了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
安卓尼爾
iT邦新手 2 級 ‧ 2024-07-01 09:07:17

不太懂你指的WorkBench是啥意思
您是用C#做全端嗎
本人C#只有後端webapi 與blazor的經驗

通靈覺得應該是類似 restart application 的意思,整個應用程式會重新編譯執行
當然前端畫面也會重整,SingalR會重啟,所有的連線都會被移除,所以會取得新的連線ID

柴柴 iT邦新手 4 級 ‧ 2024-07-01 15:25:29 檢舉

WorkBench就是操作DB的介面,如下圖
當我點下去執行,前端頁面整個就會重新整理一次。
https://i.imgur.com/ntc0U1E.png

0
jack8900
iT邦新手 1 級 ‧ 2024-07-01 11:31:04

網路上的範例
沒看到你的程式碼,但是看網路上的範例好像很正常,沒有你說的狀況

另外,如果要有歷程記錄,應該要建立帳號密碼的機制來處理吧?

柴柴 iT邦新手 4 級 ‧ 2024-07-01 15:30:10 檢舉

感謝提供範例,但這不是用前後端分離和我的方式有點不太一樣

我要發表回答

立即登入回答