Zajmuję się tworzeniem serwera proxy w Oszczędzanie. Mój problem polega na tym, że każde połączenie przychodzące do proxy używa tego samego wystąpienia Handler'a. Implementacja klienta proxy znajduje się w module obsługi, więc wszyscy klienci komunikują się przez to samo połączenie z serwerem końcowym.Thrift - różne egzemplarze Handler dla każdego gniazda
Mam: n klientów -> n gniazd -> 1 obsługi -> 1 gniazdo -> 1 serwer Co chcę zaimplementować: n klientów -> n gniazd -> n obsługi -> n gniazd -> 1 serwer
Problem polega na tym, że jeśli klient zmienia "lokalny" parametr (coś, co jest zdefiniowane dla każdego klienta niezależnie) na serwerze, inni klienci będą również pracować ze zmienionym środowiskiem.
shared_ptr<CassProxyHandler> handler(new CassProxyHandler(adr_s,port_s,keyspace));
shared_ptr<TProcessor> processor(new CassandraProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TFramedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TThreadedServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();
Czy istnieje sposób, aby wdrożyć serwer, który tworzy nową instancję Handler dla każdego gniazda serwera zamiast przy użyciu tej samej procedury obsługi?
Dzięki za wszelkie sugestie i pomoc, @
Czy kiedykolwiek umieszczałeś prośbę o bilet/wydanie/funkcję @ apache? Myślę, że można to również wykorzystać, aby bardzo łatwo umożliwić komunikację full-duplex/dwukierunkową. – BatteryBackupUnit