如何使用仅限WebSockets将Java客户端连接到SignalR Hub?

7
我需要从我的Java桌面应用程序访问运行SignalR Hub的websocket服务器。
  • 一个库可以做到这一点,但它已经停止更新。存在很多问题和拉取请求,自2015年以来就没有更新过了。
  • 我还发现了另一个库,但据我所知,它只适用于Android项目。
  • 我找到了一个SO问题,它说可以通过一些变通方式直接与SignalR服务器(标准websocket调用)进行通信,但给出的链接已经失效了。

当我尝试使用websocket直接访问服务器时,HTTP握手失败了(我得到的是HTTP 200而不是101)。

有人能帮忙吗?

1个回答

7
您不能仅使用裸WebSocket连接到SignalR 2.x。原因是启动连接需要发送几个HTTP请求,这些请求必须按特定顺序发送并包含特定内容。我在博客文章中描述了SignalR协议。阅读此文章后,您将了解为什么需要专用的SignalR 2.x客户端。

话虽如此 - SignalR for ASP.NET Core 的新版本不再具有这个协议和要求,现在可以只使用裸的websockets连接到服务器。我之前创建了一个演示,展示了如何实现 - 你可以在这里找到详细信息。我也开始工作一个关于hubs层的示例,但还需要完成它。


1
您的示例存储库似乎没有使用Websockets连接到SignalR的示例 - 也许您已经更改了这个? - Dave New
1
有一个使用WebSockets的社交天气示例:https://github.com/aspnet/SignalR/blob/dev/samples/SocialWeather/wwwroot/index.html#L70-L100。实际上它不仅仅是这样 - 你可以在这里阅读整个故事:https://blog.3d-logic.com/2017/01/15/signalr-core-part-23-asp-net-sockets/。 - Pawel
该URL已失效,https://github.com/aspnet/SignalR/tree/master/samples/SocialWeather的服务器根本没有使用SignalR。(而且该存储库已被归档并设置为只读。) - Mike Rosoft
跟进:WebSocket->SignalR示例在https://github.com/aspnet/SignalR-samples/tree/pawelka/ticker-ws/StockTickR/StockTickRApp。 - Mike Rosoft
@Pawel 而且没有办法检查用户因超时而失去互联网连接。再次确认,对吗? - daniil_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接