java - Servicestack 或 SignalR 的 SSE Java 客户端

标签 java jersey client signalr server-sent-events

我正在寻找将服务器端 ServieStack 或 SignalR 与 Java 客户端连接的可能性。我想使用 Java 客户端从服务器获取 SSE 消息。

使用 Jersey,我可以创建一个 SSE Java 客户端并获取事件,但是,这不是我订阅的 channel ,而是整个网站...

最诚挚的问候 约翰斯特

最佳答案

import java.util.concurrent.ExecutionException;

import microsoft.aspnet.signalr.client.*;
import microsoft.aspnet.signalr.client.hubs.*;
import microsoft.aspnet.signalr.client.transport.*;

import com.google.gson.JsonElement;

public class Client {

public static void main(String[] args) throws Exception {

    // Initialize the Logger
    Logger logger = new Logger() {

        @Override
        public void log(String message, LogLevel level) {
            System.out.println(message);
        }
    };

    String serverUri = "http://localhost:8080/signalr";

    // Connection to the Server
    HubConnection conn = new HubConnection(serverUri);

    // To invoke methods in the client, it have to be the same name as in
    // the Server
    HubProxy proxy = conn.createHubProxy("Hub");

    // Initializes the transport with a logger
    ClientTransport transport = new ServerSentEventsTransport(conn.getLogger());

    //Listening to the Server
    proxy.on("machineNotification",new SubscriptionHandler1<SentTestEvent>(){
        @Override
        public void run(SentTestEvent send){
            System.out.println(send.Channel +"|"+send.From+"|"+send.Message+"|"+send.Selector+"|"+send.ToUserId);
            //logger.log("result :="+msg, LogLevel.Information);
        }
    },SentTestEvent.class);

    // Starts the connection synchronously by calling get()
    SignalRFuture<Void> awaitConnection = conn.start(transport);
    try {
        awaitConnection.get();


        System.out.println("Connected to server at "+serverUri);
    } catch (InterruptedException e) {
        logger.log("Check " + e, LogLevel.Information);
        e.printStackTrace();
    } catch (ExecutionException e) {
        logger.log("Check " + e, LogLevel.Information);
        e.printStackTrace();
    }

    // Creates subscriptions for the connection
    proxy.subscribe(awaitConnection);

    System.out.println("connected.Id = "+conn.getConnectionId());
}

public class SentTestEvent{
    String Channel;
    String From;
    String Message;
    String Selector;
    String ToUserId;

    public SentTestEvent(String channel, String from, String message, String selector, String toUserId){
        Channel = channel;
        From = from;
        Message = message;
        Selector = selector;
        ToUserId = toUserId;
    }

}

这是一个 SignalR Java 客户端,可与 SignalR C# 服务器配合使用。 笔记!所有名称(类、集线器、方法)必须相同!

关于java - Servicestack 或 SignalR 的 SSE Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40884756/

相关文章:

java - java中的条件运算符&&

java - Android MaterialBetterSpinner 更改事件

java - 适用于 Java( Jersey )开发人员的 RESTful Python

client - Luci(Openwrt)无线网桥客户端-如何配置?

java - 如何设置动态填充的多级下拉框表单?

java - 多个服务器同时也是客户端 - JAVA 中的通信

java - JSONP 与 Jersey

java - 业务层使用@Context注解访问HttpServletRequest

clojure - Clojure WebSocket客户端

Glassfish 3.1.2 配置相互认证的客户端证书