[Time] Name | Message |
[00:05] errordeveloper
|
hi
|
[00:05] errordeveloper
|
I would like to hear an opinion on this
|
[00:05] errordeveloper
|
interesting article btw http://www.imatix.com/articles:whats-wrong-with-amqp
|
[00:23] mikko
|
errordeveloper: opinion on what?
|
[00:44] errordeveloper
|
well they are critisizing AMQP in general ...
|
[00:45] errordeveloper
|
I wonder whether it really is so bad ?
|
[01:01] mikko
|
i don't understand AMQP well enough to answer that really
|
[01:37] strich
|
Afternoon
|
[01:39] strich
|
Quick question - I need to get the uuid out of a message, store it, and pass it back when I form a reply. Its not working, and I think its because I'm probably serializing it to char or string, and then back again in a bad format. Any tips/guides on how to do this in C++?
|
[01:39] strich
|
That is, the reply sends out, and the client doesn't get it. So I can only assume the uuid I'm replying to is wrong
|
[01:40] strich
|
I'm using ROUTER (server) and DEALER (client)
|
[01:41] errordeveloper
|
mikko: nevermind, I was mislead
|
[01:41] errordeveloper
|
someone told me that zmq is an implementation of amqp
|
[01:41] errordeveloper
|
and it's not :)
|
[01:42] errordeveloper
|
hm ... so there is no xml involved in zmq, right?
|
[01:43] strich
|
errordeveloper - As far as I know, no. But, you could still compose and serialize a XML structure into the zmq messages if you wanted to
|
[01:43] strich
|
The way I see it, zmq is your mail postage company. XML or google's protobuf or any number of other message structures are the contents of the letter itself.
|
[01:46] errordeveloper
|
sure
|
[01:46] errordeveloper
|
i'm all for zmq now :)
|
[01:47] strich
|
Aye i'm fairly new to it as well, but I'm loving it thus far
|
[01:47] strich
|
Even if the C++ part of it isn't that well done
|
[01:47] errordeveloper
|
though ... what about if my messages are time-sensetive ... i.e. they have to arrive in the same order ...
|
[01:48] errordeveloper
|
??
|
[01:48] strich
|
zmq takes care of that for you
|
[01:48] errordeveloper
|
kewl!!!
|
[01:48] errordeveloper
|
:)))
|
[01:48] strich
|
All you do as the developer is send the stuff and they'll arrive
|
[01:49] errordeveloper
|
I mean, I would like to use it for networked music perfomrance applications
|
[01:50] strich
|
music performance?
|
[01:50] strich
|
Like a concert?
|
[01:51] strich
|
You could stream music to subscribers using the PUBLISHER -> SUBSCRIBER concept, which multicasts out data (music) to clients
|
[02:07] mikko
|
strich: how are you serialising to char * ?
|
[02:08] strich
|
I've just rewritten my receive method, and it is currently untested with:
|
[02:08] strich
|
uuid.assign(static_cast<char*>(zmsg.data()));
|
[02:08] strich
|
uuid is a std::string
|
[02:09] mikko
|
i think you need to give size as well
|
[02:09] mikko
|
otherwise it will cut on first null char
|
[02:09] strich
|
You are correct. I didn't know if that would be ok or not
|
[02:09] mikko
|
std::string uuid (static_cast<char*>(zmsg.data()), zmsg.size());
|
[02:10] strich
|
Yep just added that. I think you just saved me some debugging Fun mikko, cheers :)
|
[02:11] mikko
|
another option is to use std::vector<unsigned char>
|
[02:11] strich
|
Any reason to, specifically?
|
[02:11] strich
|
My next question will be how I would drop my uuid string back into a reply. It seems most examples use memcpy
|
[02:12] mikko
|
it will work as expected as a string but conceptually when it's a vector you dont mishandle it as a string
|
[02:12] mikko
|
and expect .c_str() to be normal null terminated character array
|
[02:12] mikko
|
zmq::message_t reply(uuid.size()); memcpy (...
|
[02:13] strich
|
btw, do you have to supply .size for any message initialization? It seems theres a constructor that allows you to omit it
|
[02:14] mikko
|
yes, if you copy data to it
|
[02:14] mikko
|
the overloaded constructor with size will allocate storage for the message
|
[02:14] mikko
|
zmq::message_t msg; can be used when receiving
|
[02:14] mikko
|
where the engine calls init
|
[02:14] strich
|
ok np, I think I'm fucking it up there to. I'll rewrite my send method
|
[02:15] mikko
|
when you memcpy there has to be storage where to copy to
|
[02:18] strich
|
zmq::message_t zmsg(uuid.size()); memcpy(zmsg.data(), uuid.data(), uuid.size());
|
[02:26] strich
|
zmq::message_t zmsg(uuid.size()); memcpy(zmsg.data(), uuid.c_str(), uuid.size());
|
[02:26] strich
|
mikko - Which should I use of the above?
|
[02:27] mikko
|
i tend to use .c_str()
|
[02:27] mikko
|
just out of habbit
|
[02:27] mikko
|
i don't think there should be difference
|
[02:28] strich
|
ok np
|
[02:29] mikko
|
what is the issue?
|
[02:30] strich
|
Oh nothing, still just refactoring my methods. I just saw it in two examples and wanted to know if there was a diff
|
[06:40] Nitin
|
Hello everyone.. I have a question... I need to make a REST call to amazon web services.. Can I use zmq for that??..
|
[07:03] strich
|
mmm I don't think so Nitin
|
[07:04] strich
|
zmq requires zmq at both end-points
|
[07:04] strich
|
You'll need to write an interface between Amazon's API and an internal zmq network of your own
|
[07:21] Nitin
|
hmmm... ok.. so making a basic HTTP request is also not possible...
|
[07:54] sustrik
|
there's raw TCP under 0MQ, not HTTP
|
[07:54] strich
|
Even so, you wouldn't be able to communicate with a TCP socket unless its also under the control of zmq
|
[08:28] CIA-32
|
libzmq: 03Mikko Koppanen 07master * r9d0e122 10/ (acinclude.m4 configure.in): Added option to choose internal polling system ...
|
[11:10] errordeveloper
|
does anyone here know of PTP (IEEE 1588) ?
|
[11:21] strich
|
PTP?
|
[11:41] errordeveloper
|
strich: do you what it is ?
|
[11:41] errordeveloper
|
I mean, I do .. just wonder if PTP could be glued with 0MQ
|
[11:42] errordeveloper
|
I mean, if it could be done in somewhat semi-transparent fashion ....
|
[11:42] errordeveloper
|
I just posted this quesion to the list btw
|
[11:42] errordeveloper
|
my first post on 0mq
|
[11:43] errordeveloper
|
:()
|
[11:43] strich
|
You'd have to wrap it up at both end points I would think
|
[11:43] errordeveloper
|
strich: It would quite an interesting thing to do, wouldn't it ?
|
[11:43] strich
|
zmq is a carrier, using the TCP protocol
|
[11:43] strich
|
ANy other protocols would have to be wrapped out at both ends
|
[11:43] strich
|
*up
|
[11:44] errordeveloper
|
I suppose I need to read on 0mq architecture
|
[11:45] errordeveloper
|
hm .. I looked on github and there seem to be 3 release branches of 0mq
|
[11:45] errordeveloper
|
(at least)
|
[11:45] errordeveloper
|
is the protocol slightly different in all those version ?
|
[11:48] mikko
|
errordeveloper: yes, there are some modifications
|
[11:48] mikko
|
2.1 is not compatible with 3.0
|
[11:52] errordeveloper
|
ok .. but the API haven't changed, right ?
|
[11:53] mikko
|
errordeveloper: minor changes between 2.1 and 2.2
|
[11:53] mikko
|
ermm
|
[11:53] mikko
|
2.1 and 3.0
|
[11:53] errordeveloper
|
ok
|
[11:53] mikko
|
major version can break api
|
[11:53] errordeveloper
|
gentoo comes with 2.1 as I can see
|
[11:53] errordeveloper
|
I might stick to 2.1 for now then
|
[11:55] mikko
|
you usually only need 3.0 for subscription forwarding
|
[11:55] errordeveloper
|
ok
|
[11:56] mikko
|
pre 3.0 topic matching was done on client
|
[11:56] mikko
|
which causes extra network traffic
|
[12:03] michaelmi
|
Hi all ..
|
[12:03] michaelmi
|
This is my first zmq day, so please be patient ;-)
|
[12:04] michaelmi
|
I have set up a simple request-reply scenario with a client and a server application in C
|
[12:06] michaelmi
|
client: http://pastebin.com/nELBZ7Mf
|
[12:07] michaelmi
|
server: http://pastebin.com/t5M3dvak
|
[12:08] michaelmi
|
problem is: sometimes, the client seems to terminate before any data has been sent to the server
|
[12:08] michaelmi
|
a sleep before the exit seems to avoid this beavior or at least make it less probable
|
[12:09] michaelmi
|
is this intended? shouldn't zmq_close block until all data is delivered?
|
[12:09] mikko
|
michaelmi: that doesn't look correct
|
[12:10] michaelmi
|
mikko: I hoped so :-)
|
[12:10] mikko
|
char data[] = "hello world xxx"; sprintf (data, "hallo welt %d", i);
|
[12:10] mikko
|
doesn't the data get put to the text section?
|
[12:10] michaelmi
|
oh ..well .. yes . I think so
|
[12:11] michaelmi
|
or .. no .. mom
|
[12:11] michaelmi
|
I initialize an array on the stack .. it's not "char *data = "hello world";
|
[12:12] mikko
|
true
|
[12:13] mikko
|
you shouldnt send terminating null
|
[12:13] mikko
|
usually you send just the bytes
|
[12:13] mikko
|
and terminate on other side if needed
|
[12:13] michaelmi
|
ok
|
[12:13] mikko
|
what version of zeromq is this?
|
[12:14] michaelmi
|
libzmq-dev_2.0.10
|
[12:14] mikko
|
that explains
|
[12:14] mikko
|
if you upgrade it should be fine
|
[12:15] mikko
|
there is no linger option in 2.0.x
|
[12:15] mikko
|
linger sockopt behaves like SO_LINGER
|
[12:15] michaelmi
|
ah .. thx .. gonna check this out
|
[12:16] mikko
|
that code you have there is not deterministic with zeromq 2.0
|
[12:16] mikko
|
as the sleep might or might not be enough to send the message fully
|
[12:16] michaelmi
|
true .. I just wanted to get an indication that the exit() is part of the problem
|
[12:17] michaelmi
|
tcpdump seemed to point in that direction
|
[14:00] michaelmi
|
@mikko: just wanted to give feedback that with 2.1 the problem has vanished
|
[14:01] michaelmi
|
thx!! & bye
|
[15:51] strich
|
I've got a ROUTER/DEALER setup going nicely, but I'd like to cleanly shutdown and delete any associated content once a peer (DEALER) leaves after x seconds. How can I tell if a peer is no longer connected?
|
[16:02] strich
|
No one?
|
[17:06] count
|
strich: build another req/rep pipeline that heartbeats
|
[17:06] count
|
and poll
|
[17:06] count
|
?
|
[17:07] count
|
let me not use 'pipeline' there
|
[17:07] count
|
a req/rep connection
|
[17:07] count
|
:)
|
[17:07] strich
|
So 2 connections per peer?
|
[17:07] count
|
I guess, yes
|
[17:07] strich
|
That sounds a bit excessive
|
[17:08] strich
|
Can't I do it with router/dealer?
|
[17:09] count
|
I guess you could just interleave a heartbeat between each work message on your router/dealer
|
[17:10] strich
|
That is my plan currently
|
[17:10] strich
|
I was hoping zmq had a bit more in-built intelligence for this stuff
|