This forum has been archived. Please start a new discussion on GitHub.

Everyone talks to everyone network


currently, I am trying to set up a communication framework for a multi-robot system and, thus, I am looking for appropriate software and APIs.

I am, unfortunately, not much into TCP socket or UDP network programming. So, considering what I read on ZeroC's website and in the Ice documentation, I would say, Ice and IceStorm could be the right thing for my needs. Still I would like to ask you for your opinion with focus on the feasibility of my approach.

I would like to connect every single robot to each other robot in the group via twoway connections (in order to be able to reply to processing or information requests). To accomplish this, I guess, the easisest way would be using the IceStorm service (by assigning a topic to each robot; so each robot is a publisher and a subscriber at the same time). However, I fear the amount of robots will be rather limited (with "multi"-robot I mean something between 4 and about 40 robots)? Or will Ice be able to easily handle up to a couple of hundred connections simultaneously?

I believe this brute force approach is not the nicest one could think of, but I still hope it might work. Thank you very much for your reply, your time and your efforts in advance.

Best regards,



  • xdm
    xdm La Coruña, Spain
    Hi Tobias,

    The approach you describe for IceStorm could work well, but i would prefer to have the group as a topic and send the robotId with each event, in this way is not needed to have a per robot topic and subscribe unsubscribe to each robot topic, also for connections Ice should reuse connections and you are not going too need to many connections.

    See this faq on how connections are reused
  • Hello Jose,

    sounds good, thank you very much!
  • Hello,

    after checking the documentation again, I am a bit confused by a paragraph in chapter 45.3.3 (Ice 3.2.1): "IceStorm messages have oneway semantics (see Section 2.2.2), therefore a publisher cannot receive replies from its subscribers. Any of the Ice transports (TCP, SSL, and UDP) can be used to publish and receive messages."

    Does this "no replies possible" include "no callbacks possible"? If so, is the only way to reply to messages, assigning a MessageID that I would have to manually refer to within the reply message?

    Thanks again in advance and best regards,

  • xdm
    xdm La Coruña, Spain
    Hi Tobias
    messages have oneway semantics (see Section 2.2.2), therefore a publisher cannot receive replies from its subscribers.
    Yes you can not directly send a reply to a publisher throw IceStorm, you could send a message to the publisher throw IceStorm only if the publisher is also a subscriber, but if in your application you want to only send the reply to a concrete robot (publisher), you could send the reply throw a callback. A callback proxy could be send by the publisher as part of the message that goes throw IceStorm and the robot that reply should use the callback proxy to directly reply the to the publisher, in this way the reply is not send throw IceStorm but as a regular Ice request.