as you point out, "commands" are different from "data".

in my world, we are all using identical intel hardware/software, so data is 
sent as C structs.

commands are different. the time spent parsing/generating commands is almost 
unmeasurably small,
so i hew to Plan 9 style and simply send blank-delimited words.
i use a very efficient field splitter, and then use strcmp, as in

        nf = split(msg, f, " ");
        if(nf < 1) return;
        if(strcmp(f[0], "func1") == 0){
                func1(strtol(f[1], 10, 0), f[2]);
        } else if(strcmp(f[0], "func2") == 0){
                so on ...
        } else {
                // rats; complain
}

its not terribly elegant, but it is straightforward and easy to maintain.
and having regular text makes it easier to manually scan and debug.
i have used something like JSON before, but it seemed like a lot of unnecessary 
work.

On May 22, 2012, at 11:11 AM, Marco Trapanese wrote:

> Hello,
> 
> currently I'm using zmq on several projects to control remote 
> applications. In fact, I send 'commands' rather 'data'.
> 
> The architecture of the whole software is pretty simple. There are the 
> basic functions that do the hard job (my own API). Let's call 'em 
> func1(), func2() ...
> 
> Then I wrote a raw protocol to call these functions through the zmq 
> connection. After a message is received, I check the first part to 
> decode the command and the followings to get the parameters (if any). 
> Something like this:
> 
> void parseMessage() {
>       // receive the message, get cmd, argc and argv[]
> 
>       switch (cmd) {
>       case CMD1:
>               func1();
>               break;
> 
>       case CMD2:
>               if (argc == 1) func2(argv[0]);
>               break;
>       }
> }
> 
> 
> I wonder how do you implement such an interface. Do you use a method 
> like this or there is something more flexible/elegant?
> 
> Thanks
> Marco
> 
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev


------------------
Andrew Hume  (best -> Telework) +1 623-551-2845
[email protected]  (Work) +1 973-236-2014
AT&T Labs - Research; member of USENIX and LOPSA




_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to