2015-07-21 82 views
2

我有一個小的SignalR項目,我已經開始了,現在它所做的只是接收一個字符串並將其回顯給所有連接的用戶。SignalR - 從沒有SignalR庫的javascript連接到websocket服務

我在想什麼,因爲SignalR在我的服務器上打開websockets - 我怎樣才能使用常規websockets javascript代碼連接到服務? (我有一個沒有SignalR庫就想這麼做的理由)。

我使用Chrome開發者工具看,我發現瀏覽器連接到地址爲:

ws://localhost:53675/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=YKgNxA6dhmtHya1srzPPIv6KFIYEjLTFOogXqcjPErFcKCmRdjvS2X6A2KmraW%2BrLnRUNf68gYPdOkOOgJ8yRcq4iCDm%2BbUyLejsr2NySNZBvLloWuMIAvgI6oC%2Fyt%2Ba&connectionData=%5B%7B%22name%22%3A%22ophirhubtest%22%7D%5D&tid=7 

如何生成令牌?

然後,似乎在客戶端和服務器之間往來的信息都只是普通的JSON格式的文本(這將是很容易模仿):

{"C":"d-9E7D682A-A,1|E,0|F,1|G,0","S":1,"M":[]} 
{"H":"ophirhubtest","M":"Echo","A":["test"],"I":0} 
{"C":"d-9E7D682A-A,2|E,0|F,1|G,0","M":[{"H":"ophirHubTest","M":"printEcho","A":["You said: test"]}]} 

如果我只是嘗試連接比它連接,但連接很快關閉。如果我刪除了令牌,它會立即關閉。

是否可以連接到WS「手動」?

回答

3

在連接到服務器之前,會發生連接協商。這是服務器發送所有發送和接收消息所需的數據的時間。沒有連接協商,您將無法連接到服務器。一旦你實現了連接協商,你可能會實現一個SignalR客戶端的一半。我寫了一個blog post describing SignalR protocol,它應該可以幫助你理解事物在底層的工作原理,以及爲什麼用你自己的websocket連接服務器不是直截了當的(或者如果你不遵循SignalR協議就不可能實現)。

編輯

的ASP.NET Core版本SignalR現在允許連接到裸露的WebSocket服務器。

+1

謝謝。好文章! – developer82