Home Help Center

IceStorm with Glacier2

phil++phil++ Member Philip KovacsOrganization: University of PennsylvaniaProject: Ice Storm Evaluation
In order to use Glacier2 with IceStorm applications, does one needs to write session code for both the publisher and the subscriber applications? I mean, even though the subscriber is the application "server" that hosts the object adapter, both the publisher and the subscriber act as "clients" to IceStorm.

So, if the IceStorm instance you wish to communicate with is behind a Glacier2 router on the network, you would need to create a Glacier2 session regardless of the role (pub or sub) of the IceStorm application?

Comments

  • matthewmatthew NL, CanadaMember Matthew NewhookOrganization: ZeroC, Inc.Project: Internet Communications Engine ✭✭✭
    That is correct. If you have IceStorm in your internal network, and the publishers and subscribers on your external network, then you will need them to establish Glacier2 sessions (and everything associated with that, such as keeping the session alive) for them to talk with IceStorm.
  • phil++phil++ Member Philip KovacsOrganization: University of PennsylvaniaProject: Ice Storm Evaluation
    If my IceStorm subscriber connects to a number of different IceStorm servers in order to subscribe to multiple topics, with no regard to their network location, does that not demand the use of two object adapters, with one adapter dedicated to subscriptions to the LAN-side IceStorm instance?

    I am using the PublishedEndpoints mechanism:
    Subscriber.Adapter.Endpoints=<actual LAN endpoints>
    Subscriber.Adapter.PublishedEndpoints=<WAN endpoints, as seen externally>
    

    to enable my subscriber to receive callbacks from WAN-side IceStorm instances through a hardware router that port-forwards, etc. If my subscriber happens to connect both to local and remote IceStorm instances, the WAN-side published address embedded in the adapter's proxy might be not be usable on the LAN side.

    Finally, back to Glacier2. Is possible for an IceStorm application, be it subscriber or publisher, simply not to know whether or not a peer is behind Glacier2 router? Or does the deployment of Glacier2 demand advertisement so that peers can configure for its use?
  • matthewmatthew NL, CanadaMember Matthew NewhookOrganization: ZeroC, Inc.Project: Internet Communications Engine ✭✭✭
    In that case you should use more than one object adapter. If you use Glacier2 at the IceStorm end, you don't need to use port forwarding at all, since all communications back to your subscriber will be bi-directional. However, using more than a single instance of Glacier2 in an application can get quite complex and isn't really recommended!

    Any Glacier2 client must be aware of Glacier2 since it must establish a session before Glacier2 will forward requests and replies. Servers behind the firewall need not be aware of Glacier2.
  • phil++phil++ Member Philip KovacsOrganization: University of PennsylvaniaProject: Ice Storm Evaluation
    Hi,

    Object* ice_router(Router* rtr);

    Is it possible to create the Router* parameter from a string representation of the router's address? In other words I want to create a routed proxy without using the name.Router property of the config file. My (c++) app is structured to create proxies from strings, without using the config file.

    Is that possible?

    Also, are the (bi-directional) callbacks from servers over a Glacier2 routed connection considered activity with respect to the session timeout of the Glacier2?

    Thanks,

    Phil
  • benoitbenoit Rennes, FranceAdministrators, ZeroC Staff Benoit FoucherOrganization: ZeroC, Inc.Project: Ice ZeroC Staff
    Hi Phil,
    phil++ wrote: »
    Hi,

    Object* ice_router(Router* rtr);

    Is it possible to create the Router* parameter from a string representation of the router's address? In other words I want to create a routed proxy without using the name.Router property of the config file. My (c++) app is structured to create proxies from strings, without using the config file.

    Is that possible?

    Sure, just use the communicator stringToProxy method and cast the proxy to an Ice::RouterPrx with unchechedCast or checkedCast.
    Also, are the (bi-directional) callbacks from servers over a Glacier2 routed connection considered activity with respect to the session timeout of the Glacier2?

    Thanks,

    Phil

    No, the session timeout is only based on client side activity (changing this to also take into account server side activity is on our TODO list).

    Cheers,
    Benoit.
  • phil++phil++ Member Philip KovacsOrganization: University of PennsylvaniaProject: Ice Storm Evaluation
    Thanks Benoit.

    Am I correct that the only way to ice_ping() a Glacier2 session is if the router has a SessionManager installed? With no session manager you get null back from createSession and you have no proxy to work with. But, implementing a session manager on the router solely for the purpose of keeping a connection alive seems odd to me.

    [edit: Ah, the docs do state that I can ping an object in the server in lieu of a session proxy. OK, I will try periodically pinging the IceStorm topic manager as that seems to be the logical object in my case.]

    Phil
  • matthewmatthew NL, CanadaMember Matthew NewhookOrganization: ZeroC, Inc.Project: Internet Communications Engine ✭✭✭
    Yes, that is also on the TODO list :)
Sign In or Register to comment.