Callback and Glacier Example?

in Help Center
Hi,
I am trying to get the demo/callback example to work via Glacier as described in the manual. I can not get it to work
Does anyone have sample configs?
I continually get...
./client: Outgoing.cpp:293: Ice::ObjectNotExistException:
object does not exist
identity: Glacier/router
facet:
operation: getClientProxy
Will IceStorm work via glacier too? My application needs to support Sever to Client callbacks....but my clients maybe behind firewall. As I understand it Glacier is required to get the server side to re-use the client connection.....did I understand that correctly? Any other way to do this?
I am trying to get the demo/callback example to work via Glacier as described in the manual. I can not get it to work

I continually get...
./client: Outgoing.cpp:293: Ice::ObjectNotExistException:
object does not exist
identity: Glacier/router
facet:
operation: getClientProxy
Will IceStorm work via glacier too? My application needs to support Sever to Client callbacks....but my clients maybe behind firewall. As I understand it Glacier is required to get the server side to re-use the client connection.....did I understand that correctly? Any other way to do this?
0
Comments
How did you start Glacier and which configuration file did you use? The following worked for me:
You might want to execute the processes in different terminal windows to better see where the messages are coming from.
Yes, you're correct. Your server (or IceStorm) needs to go through Glacier to forward callbacks to your client. Glacier will re-use the client connection to forward the request.
Of course, you can also use IceStorm with Glacier. Actually, just like the callback server in the callback demo, IceStorm doesn't have any knowledge of Glacier. It's totally transparent to the server.
Let us know if you need more information or if you still have difficulties running the demo!
Benoit.
The documentation indicates that if I want to use callbacks I will need a seperate instance of glacierrouter for each client. Is that true? Is it really feasible to have one router for each client....say 3000 clients at a time?
If I am just using two-way calls (no callback), but the twoway calls do return values and have output arguments....do I still need individual glacier instances...or will one do?
Thanks for the help.
Yes, this is correct -- you need one router instance per client. With this approach, if a router dies (possibly because of a rogue client), other clients are not affected.
Depending on how many machines will be running the routers and depending on how the operating system scales to a high number of processes, this should work. If it doesn't scale, another solution would be to write your own router service (the Ice core provides all the hooks to do this).
One will do. Return values and output parameters are always sent over the same connection as the request. But... don't you need callbacks for the chat system for instance (assuming we are still talking about the game chest application here
Benoit.
Is there any information on this? I suspect I do not need all of glacier...only a process which will accept connections and route to the appropriate backend server.....and handle sending the callbacks.
Another question....does AMI re-use the client connection or does the server connect to the client? What about AMI connecting to a AMD server?
Sorry....just trying to understand everything here.
Yep...it is likely that I will....I can think of some nasty polling solutions, or an AMI trick...but it is not elegant. I am just trying to understand all the connectivity stuff.
One other question....I was thinking of using IceStorm for the chat system....publish/subscribe. I am guessing that uses server side callbacks?
I'm afraid the only information available at this time is the Ice-1.3.0/slice/Ice/Router.ice documentation and the Glacier source code. Of course, if you have a commercial need for Ice, we would be more than happy to help
AMI is not much different from a synchronous two way invocations in this respect. It's just asynchronous, meaning that you can make the request and receive the results later. So to answer to your question, yes, the response and the output parameters of an AMI request will be received over the same connection as the connection used to send the request.
Note that AMI and AMD have nothing to do with callbacks (at least not in the sense we've been discussing so far). It won't help you to send callbacks from your server to your clients. AMI will just allow you to make a request on a server asynchronously.
I don't think AMI would help but let me know if that's still confusing.
Yes, your client will have to register a subscriber object with an IceStorm topic. So your client will have to act as a server to receive invocations for this subscriber object from the IceStorm service. If your client is using a router, this shouldn't be a problem -- the invocations from IceStorm will be routed through the connection your client established with the router (you could try this yourself with the IceStorm demo by just changing the subscriber configuration like the callback demo to use a Glacier router, let me know if you need some help with this).
Benoit.