gpt4 book ai didi

java - 如何在Java中使grpc StreamObserver对象可序列化

转载 作者:行者123 更新时间:2023-12-02 00:52:05 27 4
gpt4 key购买 nike

我在 Spring boot 中使用 gprc 双向流式传输聊天应用程序,从 StreamObserver<T> 开始对象用于将消息从服​​务器发送回客户端。所以,我想序列化StreamObserver<T>对象并将其转换为字节流以将其存储在 redis 或其他数据库中。但从那时起,StreamObserver<T>是一个不实现或扩展可序列化的接口(interface)。因此,我正在寻找一种如何序列化它的解决方案,因为大约有数千名用户正在使用聊天应用程序并存储 StreamObserver <T>在一些Map<String, StreamObserver<T>>这不是个好主意。

目前,我正在存储StreamObserver<T> map 中的对象。 Map<String, StreamObserver<T>>这里,map的键是聊天应用程序的用户id,值是StreamObserver对象,其中包含onNext、onError、onCompleted函数,用于从服务器向客户端发送消息

// Storing StreamObserver object with user Id
public static Map<String, StreamObserver<Chat.ChatMessageFromServer>> observersMap = new HashMap<String, StreamObserver<Chat.ChatMessageFromServer>>();


@Override
public StreamObserver<Chat.ChatMessage> chat(final StreamObserver<Chat.ChatMessageFromServer> responseObserver) {

// responseObserver -> Storing it into a map. So, server could send message back to the client

String user = grpcServerInterceptor.contextKey.get();
System.out.println("");
System.out.println("User : " + user);

if (observersMap.get(user) == null) {

System.out.println("New User : " + user);
System.out.println("Adding User to observers map");
System.out.println("");

observersMap.put(user, responseObserver);
} else {

System.out.println("This User already exists in observersMap : " + user);
System.out.println("By the way, Updating it");

observersMap.put(user, responseObserver);
}


// This function sends message to client from Server
public void sendMessageFromServerToClient(String user, String message) {

// Fetching StreamObserver from observersMap as defined above
observersMap.get(user).onNext(Chat.ChatMessageFromServer.newBuilder().setMessage(Chat.ChatMessage.newBuilder().setTo(user).setFrom("Server").setMessage(message)).build());

System.out.println("Pushed message to user : " + user);
System.out.println("");

}


最佳答案

StreamObserver对应于真实TCP连接上的流。该资源无法转移到数据库。无法将其序列化到数据库以减少内存使用。

关于java - 如何在Java中使grpc StreamObserver对象可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com