2015-07-21 101 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