【问题标题】:SignalR - connect to websocket service from javascript without SignalR librarySignalR - 从没有 SignalR 库的 javascript 连接到 websocket 服务
【发布时间】:2015-10-11 02:46:47
【问题描述】:

我已经启动了一个小型 SignalR 项目,现在它所做的只是接收一个字符串并将其回显给所有连接的用户。

我想知道的是,由于 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 ?

【问题讨论】:

    标签: javascript websocket signalr signalr-hub


    【解决方案1】:

    在您可以连接到服务器之前,会发生连接协商。这是服务器发送发送和接收消息所需的所有数据的时候。如果没有连接协商,您将无法连接到服务器。一旦你实现了连接协商,你可能会实现 SignalR 客户端的一半。我写了一个blog post describing SignalR protocol,它应该可以帮助你理解底层是如何工作的,以及为什么用你自己的 websocket 连接到服务器并不简单(或者如果你不遵循 SignalR 协议就根本不可能)。

    编辑

    SignalR 的 ASP.NET Core 版本现在允许使用裸 webSocket 连接到服务器。

    【讨论】:

    • 谢谢。很棒的文章!
    【解决方案2】:

    我只想添加一个可以使用 websocket 连接到 SignalR 的 ASP.NET Core 版本,但是您必须在每次调用结束时添加魔法字符 30

    const endChar = String.fromCharCode(30);
    socket.send(`{"arguments":["arg1"],"streamIds":[],"target":"TestMethod","type":1}${endChar}`);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多