dev*_*r82 4 javascript websocket signalr signalr-hub
我有一个小型的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
Run Code Online (Sandbox Code Playgroud)
如何生成令牌?
然后,似乎客户端和服务器之间的消息只是常规的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"]}]}
Run Code Online (Sandbox Code Playgroud)
如果我只是尝试连接而不是连接,但连接很快就会关闭.如果我删除令牌,它会立即关闭.
是否可以"手动"连接到WS?
在连接到服务器之前,会发生连接协商.这是服务器发送发送和接收消息所需的所有数据.如果没有连接协商,您将无法连接到服务器.实施连接协商后,您可能需要实施一个SignalR客户端.我写了一篇描述SignalR协议的博客文章,它可以帮助你了解事情在底层是如何工作的,以及为什么用你自己的websocket连接到服务器并不简单(或者如果你不遵循SignalR协议则根本不可能).
编辑
SignalR的ASP.NET核心版现在允许使用裸webSocket连接到服务器.
我只是想补充一点,可以使用 websocket 连接到 SignalR 的 ASP.NET Core 版本,但是您必须在每次调用的末尾添加魔术字符 30
const endChar = String.fromCharCode(30);
socket.send(`{"arguments":["arg1"],"streamIds":[],"target":"TestMethod","type":1}${endChar}`);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2595 次 |
| 最近记录: |