Java 客户端

Java 客户端 SignalR ASP.NET Core

作者: Mikael Mengistu

Java 客户端允许从 Java 代码(包括 Android 应用)连接到 ASP.NET Core SignalR 服务器。 JavaScript 客户端.net 客户端一样,Java 客户端允许您实时接收消息并向中心发送消息。 Java 客户端在 ASP.NET Core 2.2 及更高版本中可用。

本文中引用的示例 Java 控制台应用使用 SignalR Java 客户端。

查看或下载示例代码如何下载

安装 SignalR Java 客户端包

Signalr-1.0.0 JAR 文件允许客户端连接到 SignalR 集线器。 若要查找最新的 JAR 文件版本号,请参阅Maven 搜索结果

如果使用的是 Gradle,请将以下行添加到Gradle文件的 dependencies 部分:

implementation 'com.microsoft.signalr:signalr:1.0.0'

如果使用的是 Maven,请在pom .xml文件的 <dependencies> 元素中添加以下行:

<dependency>
    <groupId>com.microsoft.signalr</groupId>
    <artifactId>signalr</artifactId>
    <version>1.0.0</version>
</dependency>

连接到集线器

若要建立 HubConnection,应使用 HubConnectionBuilder 在建立连接时,可以配置中心 URL 和日志级别。 build之前调用 HubConnectionBuilder 方法,配置任何必需的选项。 开始与 start的连接。

HubConnection hubConnection = HubConnectionBuilder.create(input)
        .build();

从客户端调用集线器方法

调用 send 调用集线器方法。 将 hub 方法名称和在 hub 方法中定义的所有参数传递到 send

hubConnection.send("Send", input);

备注

如果在无服务器模式下使用 Azure SignalR 服务,则无法从客户端调用集线器方法。 有关详细信息,请参阅SignalR 服务文档

从中心调用客户端方法

使用 hubConnection.on 可在客户端上定义中心可调用的方法。 在生成之后但在开始连接之前定义方法。

hubConnection.on("Send", (message) -> {
    System.out.println("New Message: " + message);
}, String.class);

添加日志记录

SignalR Java 客户端使用SLF4J库进行日志记录。 这是一个高级日志记录 API,它允许库的用户通过引入特定的日志记录依赖项来选择自己的特定日志记录实现。 下面的代码段演示如何将 java.util.logging 与 SignalR Java 客户端一起使用。

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

如果未在依赖项中配置日志记录,SLF4J 将加载默认的非操作记录器,并提供以下警告消息:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

可以安全地忽略此情况。

Android 开发说明

与 Android SDK SignalR 客户端功能的兼容性相关,在指定目标 Android SDK 版本时,请考虑以下各项:

配置持有者令牌身份验证

在 SignalR Java 客户端中,可以通过向HttpHubConnectionBuilder提供 "访问令牌工厂" 来配置用于身份验证的持有者令牌。 使用withAccessTokenFactory提供RxJava 单一<字符串 > 如果调用了单延迟,你可以编写逻辑来为客户端生成访问令牌。

HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

已知限制

  • 仅支持 JSON 协议。
  • 传输回退和服务器发送事件传输不受支持。
  • 仅支持 JSON 协议。
  • 仅支持 Websocket 传输。
  • 目前尚不支持流式处理。

其他资源