[Time] Name | Message |
[00:00] mikko
|
the message is arbitrary binary blob, a string or a number or anything
|
[00:00] mikko
|
but you are always guaranteed to receive the whole message on the other side
|
[00:00] mikko
|
the message can be instruction to call a function
|
[00:00] mikko
|
or execute a binary
|
[00:00] mikko
|
but this is something you need to implement
|
[00:01] mikko
|
think about for example this chatroom
|
[00:01] mikko
|
we send messages all the time
|
[00:01] mikko
|
you might even say that we publish messages in topic #zeromq
|
[00:01] mikko
|
another channel is would be another topic
|
[00:01] mikko
|
(using pub-sub terms)
|
[00:02] Bartzy
|
instruction to execute a binary = string that I need to check for and do something with it, right ?
|
[00:02] mikko
|
yes
|
[00:02] Bartzy
|
yes I understand the pub-sub thingie
|
[00:02] Bartzy
|
OK.. and how can I send a file using zeromq ?
|
[00:02] Bartzy
|
is that recommended ?
|
[00:03] Bartzy
|
or there are better ways to store a file and send it (via NFS)?
|
[00:03] mikko
|
send it where?
|
[00:05] Bartzy
|
I have a web server, a client sends a request to do an effect on a URL
|
[00:05] Guthur
|
Bartzy, working through at least some of the Guide examples can be could to get things to 'click'
|
[00:06] Guthur
|
could/good
|
[00:07] Bartzy
|
PHP downloads that image from the URL, then it needs to store it some where the image-processing server(s) can access it. It then should send a message or a 'job' for one of the image-processing servers to do a specific effect on that image, and save the new image in a place where the web server can access (for the user to fetch)
|
[00:08] Bartzy
|
So storing the original image and the result image - is that best done via NFS , or using ZMQ to get the original image to the image-processing server(s), and then the result image from the image-processing servers to the web server through ZMQ as well...
|
[00:10] DanielFriesen
|
*sigh* I wish there was a nice api like ZMQ that also supported udp messages that could just be dropped, or would let you know what connections it still has alive...
|
[01:43] josh
|
hi
|
[01:44] josh
|
does anyone know how to do a rate limit on a pull socket
|
[05:21] CIA-75
|
libzmq: 03Martin Sustrik 07master * rb2eb84f 10/ (4 files): Substantial simplification of uuid_t ...
|
[05:30] CIA-75
|
libzmq: 03Martin Sustrik 07master * r96213d5 10/ src/tcp_connecter.cpp : WSAENETUNREACH is a valid networking error ...
|
[10:35] travlr
|
mikko: ping
|
[10:35] mikko
|
yes?
|
[10:35] travlr
|
hey, i'm just now working with the irc log you gave me.. what time zone are you in?
|
[10:36] mikko
|
BST at the moment
|
[10:36] travlr
|
the log is in bst then?
|
[10:36] mikko
|
well, it is during summer
|
[10:37] travlr
|
the dates are from march 2010 to i think it was november 2010
|
[10:38] mikko
|
London will stay on BST until Sunday, October 30, 2011 at 2:00 AM
|
[10:38] mikko
|
when clocks are moved to Sunday, October 30, 2011 at 01:00:00 GMT
|
[10:38] travlr
|
ok, i think i only need july anyway, so thank you.
|
[10:39] mikko
|
no problem
|
[14:16] ianbarber
|
pieterh: here?
|
[14:16] pieterh
|
ianbarber: aye
|
[14:16] ianbarber
|
jujst
|
[14:17] ianbarber
|
argh, typing fail :)
|
[14:17] pieterh
|
:)
|
[14:17] ianbarber
|
just looking at the titanic pattern
|
[14:17] ianbarber
|
titanic.c, titanic_request
|
[14:17] ianbarber
|
creates a zmsg reply, but doesn't seem to send it:
|
[14:17] ianbarber
|
â//ââNowâsendâUUIDâbackâtoâclient
|
[14:17] ianbarber
|
ââââââââreplyâ=âzmsg_newâ();
|
[14:17] ianbarber
|
ââââââââzmsg_addstrâ(reply,â"200");
|
[14:17] ianbarber
|
ââââââââzmsg_addstrâ(reply,âuuid);
|
[14:17] ianbarber
|
ââââââââfreeâ(uuid);
|
[14:17] pieterh
|
let me check...
|
[14:18] pieterh
|
hmm, indeed...
|
[14:19] pieterh
|
I must have chopped that out by mistake at some stage, thanks
|
[14:21] ianbarber
|
cool - i was about to go trawling through zmsg for some magic i was not previously aware of :)
|
[14:21] pieterh
|
I ported all the examples to libzapi/czmq and presumably didn't retest everything properly
|
[14:21] pieterh
|
I'll fix this right now
|
[14:21] ianbarber
|
yeah, easy to do.
|
[14:22] ianbarber
|
when you have a tick as well, i sent a pull req for the MDP examples https://github.com/imatix/zguide/pull/53
|
[14:22] ianbarber
|
(in php)
|
[14:22] pieterh
|
nice!
|
[14:22] pieterh
|
the guide is like a kind of complex game, and as you catch up I have to go build new levels...
|
[14:23] ianbarber
|
hehe
|
[14:23] pieterh
|
while sustrik busily keeps shifting the foundations so the levels don't remain stable
|
[14:24] ianbarber
|
got to keep things interesting! :)
|
[14:24] pieterh
|
yeah
|
[14:24] pieterh
|
strangely the old code didn't send a reply back either
|
[14:24] pieterh
|
so this may in fact be wrong, I need to re-read how titanic works in detail
|
[14:25] guido_g
|
hehehe
|
[14:25] guido_g
|
sorry
|
[14:26] ianbarber
|
you know you've got a good spec when it's a better source than the reference implementation though.
|
[14:27] ianbarber
|
too many are done the other way around
|
[14:27] pieterh
|
yeah, that's true
|
[14:33] pieterh
|
ianbarber: ah, ok, the code was correct
|
[14:33] pieterh
|
it's my fault for being too clever with the mdwrk API
|
[14:34] ianbarber
|
ah, i see it's on the next loop
|
[14:34] ianbarber
|
yep, that makes sense, just missed it before
|
[14:34] pieterh
|
I wanted to get a single method for 'send-wait-recv' instead of two
|
[14:36] pieterh
|
I'll comment the code a little better, and maybe change the API later on
|
[14:40] ianbarber
|
i think a comment should do it, just to avoid confusion
|
[14:48] pieterh
|
yup, done
|
[14:48] pieterh
|
publishing a new version now
|
[15:02] sustrik
|
pieterh: hi
|
[15:02] pieterh
|
sustrik: hey! how was Moscow?
|
[15:02] sustrik
|
great
|
[15:02] sustrik
|
the meetup was in pub
|
[15:02] pieterh
|
well, no kidding?
|
[15:02] sustrik
|
so more a drinking event
|
[15:03] mato
|
when was a meetup *not* a drinking event? :)
|
[15:03] sustrik
|
true
|
[15:03] sustrik
|
anyway, want to have a look at issue 191 now?
|
[15:03] sustrik
|
the backport thing
|
[15:03] pieterh
|
sustrik: did you find anything?
|
[15:03] sustrik
|
haven't looked so far
|
[15:04] sustrik
|
afaiu the problem you've seen doesn't happen anymore
|
[15:04] sustrik
|
so what's left are the problems with backported version, right?
|
[15:04] pieterh
|
well, I found 2-3 different issues
|
[15:04] sustrik
|
alllin issue 191
|
[15:04] pieterh
|
sustrik: I made a gist/repo with all the details
|
[15:04] sustrik
|
right?
|
[15:05] pieterh
|
yes, 191
|
[15:05] sustrik
|
all of them in 2.1
|
[15:05] pieterh
|
afaics 2-1 and 3-0 die with similar problems though in different places
|
[15:05] pieterh
|
3-0 definitely is not stable after the patch
|
[15:05] sustrik
|
do we have a test case?
|
[15:05] pieterh
|
yes yes and yes
|
[15:05] sustrik
|
great
|
[15:05] pieterh
|
could you please grab that gist and ready it?
|
[15:05] pieterh
|
I spent quite some time documenting this, making test cases
|
[15:06] pieterh
|
*read it
|
[15:06] sustrik
|
yup
|
[15:06] pieterh
|
I'm 80% sure if you fix the problem in 3-0 we'll be able to fix 2-1 similarly
|
[15:06] pieterh
|
for some reason 3-0 is easier to type than 3.0 today...
|
[15:08] sustrik
|
:)
|
[15:08] sustrik
|
ok, let me try to reproduce
|
[15:08] sustrik
|
mato: btw, have you heard of andrew hume?
|
[15:08] sustrik
|
he've offered to help with man pages
|
[15:08] mato
|
sustrik: what about him?
|
[15:08] th
|
pieterh: i have the feeling zmq_msg_data() does not return the pointer to the mp-part of the last zmq_recv, but the data-pointer of a msg that would be received by later calls to zmq_recv (which are already waiting)
|
[15:08] mato
|
sustrik: oh, yes, i heard from him
|
[15:08] sustrik
|
goodo
|
[15:09] mato
|
sustrik: exchanged a couple of emails but nothing concrete has come of it as yet
|
[15:09] pieterh
|
th: that's unpossible afaik
|
[15:09] th
|
pieterh: i converted the test case to pure c now. and it happens even with only a single call to ./stress
|
[15:10] pieterh
|
ok, push your test case somewhere, I'll give it a go
|
[15:13] th
|
pieterh: i could not make it much smaller, yet. it's only translated from c++: http://thzn.de/0mq-mp-mix-pure-c/
|
[15:14] th
|
pieterh: just added the output.txt
|
[15:15] pieterh
|
sustrik: just tried again with master+patch, both pub and sub die
|
[15:16] sustrik
|
ok
|
[15:16] pieterh
|
there is a memory corruption somewhere, because sub dies in weird ways that change when I try to add printfs
|
[15:17] sustrik
|
compiling it
|
[15:18] pieterh
|
sustrik: I'm getting a random EINVAL on rc = zmq_getsockopt (s, ZMQ_RCVMORE, &more, &moresz);
|
[15:18] pieterh
|
in the sub test
|
[15:19] pieterh
|
but I think it's caused by some memory corruption issues
|
[15:21] sustrik
|
looks like
|
[15:21] pieterh
|
sustrik: do you always run ldconfig after installing a new libzmq version?
|
[15:21] sustrik
|
no idea
|
[15:21] sustrik
|
mato?
|
[15:22] pieterh
|
anyhow, that changes nothing... the subscriber dies with EINVAL on a valid getsockopt, the pub segfaults in array.hpp as documented
|
[15:22] pieterh
|
code is hard :)
|
[15:25] sustrik
|
ok, reproduced
|
[15:25] pieterh
|
excellent!
|
[15:26] sustrik
|
digging in
|
[15:26] pieterh
|
I *think* there is a problem in the new zmq_recv() method
|
[15:27] sustrik
|
doesn't happen when you use zmq_recvmsg?
|
[15:27] pieterh
|
the bogus result on getsockopt only hits with zmq_recv, not zmq_recvmsg
|
[15:27] pieterh
|
I have two otherwise identical subs, one works, one fails
|
[15:27] sustrik
|
i se
|
[15:27] sustrik
|
see
|
[15:30] pieterh
|
sustrik: it was a bug in your C testcase... uninitialized 'size_t moresz'
|
[15:31] sustrik
|
aha
|
[15:31] pieterh
|
so, subscriber is stable, publisher does crash
|
[15:31] mato
|
sustrik: what's up?
|
[15:32] mato
|
sustrik: sorry, am distracted, not paying attention here ...
|
[15:32] pieterh
|
mato: I was asking if one needs to run ldconfig when installing new version of libzmq
|
[15:32] mato
|
pieterh: you should always run ldconfig as root after doing make install
|
[15:32] pieterh
|
ah, good to know
|
[15:32] sustrik
|
hm, i never did that
|
[15:32] mato
|
pieterh: in some cases it's redundant but it won't hurt
|
[15:32] sustrik
|
even if the new version just overwrites the old one?
|
[15:33] sustrik
|
as in recompiling
|
[15:33] mato
|
sustrik: no, then you don't need to do that
|
[15:33] sustrik
|
ok
|
[15:33] mato
|
sustrik: but explaining to users that only run this if the ABI version is different is not worth the trouble
|
[15:33] mato
|
given that running it won't hurt anything
|
[15:33] pieterh
|
but between 2.1 and 3.0 for instance it's needed...
|
[15:34] mato
|
yes, because the soname changes
|
[15:34] Guthur
|
sustrik, would you have any issues with changing the clrzmq2 bindings license?
|
[15:35] sustrik
|
Guthur: it's your project
|
[15:35] sustrik
|
you choose the license
|
[15:36] Guthur
|
sustrik, well it contains a little code from the original bindng
|
[15:36] Guthur
|
binding*
|
[15:36] sustrik
|
ah
|
[15:36] sustrik
|
sure, go on
|
[15:36] sustrik
|
what license do you want to use?
|
[15:36] Guthur
|
i still need to contact Jeffery
|
[15:36] Guthur
|
may LGPL, or MIT
|
[15:37] Guthur
|
I don't really care too much, just that GPL turns some people off
|
[15:37] sustrik
|
it's GPL ???
|
[15:37] Guthur
|
it would appear so
|
[15:37] sustrik
|
how the hell that happened?
|
[15:37] Guthur
|
I only noticed this recently
|
[15:37] Guthur
|
oh doh
|
[15:37] Guthur
|
wait I'm blind
|
[15:37] Guthur
|
sorry false alarm
|
[15:38] Guthur
|
it's LGPL
|
[15:38] sustrik
|
:)
|
[15:38] pieterh
|
lol
|
[15:38] pieterh
|
LICENSE PANIC!!!
|
[15:38] pieterh
|
Guthur: good to hear there's no problem after all
|
[15:38] Guthur
|
hehe
|
[15:39] Guthur
|
I think it's because the Lesser comes before GNU General Public License
|
[15:39] Guthur
|
and I started reading at GNU
|
[15:40] Guthur
|
the real lesson here is that I should read license agreements alot more carefully
|
[15:40] sustrik
|
actually, the wording is incorrect
|
[15:40] sustrik
|
it should be "GNU Lesser GPL"
|
[15:40] sustrik
|
we've fixed that in the core
|
[15:41] sustrik
|
but obviously it remained in clrzmq
|
[15:41] sustrik
|
feel free to fix ti
|
[15:41] sustrik
|
it
|
[15:50] Guthur
|
ah ok, cool
|
[15:51] Guthur
|
I did think it weird to have the GNU after Lesser
|
[16:05] sustrik
|
pieterh: can you check with this patch instead of the old one:
|
[16:05] sustrik
|
https://gist.github.com/948531
|
[16:09] mikko
|
sustrik: build failure
|
[16:10] sustrik
|
let me see
|
[16:10] mikko
|
http://build.zero.mq/view/libzmq/
|
[16:11] mikko
|
uuid related changes
|
[16:11] sustrik
|
ah, uuid + pgm interaction
|
[16:11] sustrik
|
i haven't tested that
|
[16:11] sustrik
|
me bad
|
[16:11] mikko
|
that's fine
|
[16:12] sustrik
|
wait a sec
|
[16:12] mikko
|
at least you get post-commit reviews :)
|
[16:12] sustrik
|
heh
|
[16:12] mikko
|
i'm unable to build debian packages though
|
[16:12] mikko
|
not sure how to use the debian/
|
[16:12] mikko
|
mato: there?
|
[16:12] mato
|
mikko: ja
|
[16:13] mikko
|
how do you build debian packages?
|
[16:13] mato
|
mikko: the debian/ stuff in git is kinda outdated
|
[16:13] mikko
|
i can add debian packages to daily builds (x86 and amd64) if it's somewhat easy
|
[16:13] mikko
|
http://snapshot.zero.mq/ already contains rpms
|
[16:14] mato
|
mikko: not right now ... the debian/ stuff currently doesn't deal with building snapshot packages
|
[16:14] mikko
|
can debian/ live under builds/?
|
[16:14] mikko
|
or does that complicate things?
|
[16:15] mato
|
mikko: that complicates things
|
[16:15] mato
|
currently debian/ can either go away altogether or needs to be updated to build snapshot packages
|
[16:16] mato
|
but i'm not sure of the value of those
|
[16:16] mikko
|
people can test more easily
|
[16:16] mikko
|
im planning to do yum repo for rpms later on
|
[16:16] mato
|
can we discuss this another time? /me is deep into trying to figure out how to get a chrome extension to talk to something else via zmq
|
[16:16] mato
|
(don't ask why)
|
[16:17] mikko
|
hehe, sure
|
[16:18] sustrik
|
oh my, chrome extension? you should have been on that webdev conf in moscow instead of me
|
[16:20] mato
|
i need to get a running instance of chrome to talk to a running instance of lynx (yes, the webbrowser from 1995) and vice versa
|
[16:20] mikko
|
ahmmmm
|
[16:20] mikko
|
i'm not gonna ask
|
[16:20] mato
|
:-)
|
[16:28] staylor
|
just throwing it out there, but have you guys ever considered cmake? I've used it to build rpms/debs and saves the hassle of maintaining spec/debian configurations.
|
[16:33] sustrik
|
it've been discussed several times
|
[16:34] sustrik
|
mikko: i have a patch, but i need steven to approve
|
[16:34] sustrik
|
it
|
[16:34] sustrik
|
i guess i just post it to the ML and won't commit it straight away
|
[17:03] pieterh
|
re
|
[17:04] pieterh
|
sustrik: do you want me to test that patch then?
|
[17:04] sustrik
|
yes
|
[17:04] pieterh
|
ok
|
[17:04] sustrik
|
i've tried pub.c and sub.c
|
[17:04] sustrik
|
and it seems to fixed the issue
|
[17:04] sustrik
|
however, confirming it would be good
|
[17:08] pieterh
|
sustrik: it complains that the patch is corrupt at the last line
|
[17:08] pieterh
|
how did you make the patch?
|
[17:09] pieterh
|
staylor: if you can make cmake work in any way at all, send examples to the list
|
[17:09] sustrik
|
pieterh: git diff
|
[17:09] sustrik
|
want me to send the format-patch to the ML?
|
[17:10] pieterh
|
sustrik: or just send me the two files
|
[17:10] pieterh
|
i don't really care, just need a branch to test
|
[17:10] sustrik
|
wait a sec
|
[17:10] sustrik
|
snet
|
[17:10] sustrik
|
sent
|
[17:10] pieterh
|
sustrik: you could work with a fork of libzmq, then push branches to that easily
|
[17:11] pieterh
|
sustrik: ok, got the files, thanks
|
[17:14] pieterh
|
sustrik: afaic... it doesn't crash any longer but the subscriber gets the wrong chunk at some stage
|
[17:15] pieterh
|
gets 1000 bytes instead of 5
|
[17:15] pieterh
|
after some iterations
|
[17:15] pieterh
|
the publisher is stable now, however
|
[17:15] sustrik
|
ok
|
[17:16] pieterh
|
receiving
|
[17:16] pieterh
|
5
|
[17:16] pieterh
|
receiving
|
[17:16] pieterh
|
1000
|
[17:16] pieterh
|
sub: sub.c:26: main: Assertion `rc == 5' failed.
|
[17:16] pieterh
|
this is the kind of output, showing rc of first recv in loop
|
[17:17] sustrik
|
there are pub.c and sub.c from the gist, right?
|
[17:17] sustrik
|
these are
|
[17:22] pieterh
|
sustrik: yes
|
[17:22] sustrik
|
hm, i'm running it for 2 mins already
|
[17:22] sustrik
|
no assertions
|
[17:22] sustrik
|
version 3.0?
|
[17:22] pieterh
|
sustrik: what kind of box are you on?
|
[17:22] pieterh
|
I'll update the gist with the precise versions I'm using, they may have changed a little...
|
[17:23] sustrik
|
i'm using master head
|
[17:23] sustrik
|
+ the patch
|
[17:23] sustrik
|
the box is a dual core desktop
|
[17:23] pieterh
|
sure, I'm using master + the two files you sent
|
[17:23] sustrik
|
+ ubuntu
|
[17:23] pieterh
|
is it possible that the problem is related to threading concurrency?
|
[17:23] sustrik
|
i don't think so
|
[17:24] sustrik
|
looks like a pipe management problem
|
[17:24] sustrik
|
but anything is possible
|
[17:24] sustrik
|
what box you are on?
|
[17:24] pieterh
|
I'm on a 4-core desktop, Ubuntu
|
[17:24] sustrik
|
still no assertions here
|
[17:24] sustrik
|
let's wait couple of minutes more
|
[17:25] pieterh
|
well, it happens after 0.5 secs or so
|
[17:25] sustrik
|
hm
|
[17:25] pieterh
|
I've updated the gist (gists are full git repos, nice)... if you want to be 100% sure you're running the same test
|
[17:25] sustrik
|
\ok
|
[17:25] pieterh
|
oh... hang on...
|
[17:26] pieterh
|
sorry! i copied dist.cpp/hpp into the wrong directory
|
[17:26] pieterh
|
am running on plain master thus
|
[17:26] pieterh
|
duh....
|
[17:26] sustrik
|
interesting it didn't fail
|
[17:26] pieterh
|
it did fail, confused frames, as expected
|
[17:27] sustrik
|
ah, right
|
[17:27] pieterh
|
better now... no errors, no crashes...
|
[17:28] pieterh
|
fix confirmed on 3.0, thus
|
[17:28] pieterh
|
now to backport to 2.1...
|
[17:28] pieterh
|
were the changes to the patch significant?
|
[17:29] sustrik
|
wait a sec
|
[17:29] sustrik
|
there's one cosmetic change
|
[17:30] sustrik
|
removing a leftover function declaration from dist.hpp
|
[17:30] pieterh
|
ack
|
[17:30] sustrik
|
clear_new_pipes
|
[17:31] sustrik
|
and the real patch is in zmq::dist_t::write
|
[17:31] sustrik
|
these 4 lines:
|
[17:31] sustrik
|
pipes.swap (pipes.index (pipe_), active - 1);
|
[17:31] sustrik
|
active--;
|
[17:31] sustrik
|
pipes.swap (active, eligible - 1);
|
[17:31] sustrik
|
eligible--;
|
[17:31] sustrik
|
instead of original 2 lines
|
[17:31] pieterh
|
this is a patch on top of the patch, right?
|
[17:31] sustrik
|
yes
|
[17:31] pieterh
|
ack
|
[17:31] sustrik
|
pieterh: sorry, no
|
[17:32] sustrik
|
the patch i posted to gist
|
[17:32] sustrik
|
is the whole thing
|
[17:32] sustrik
|
the original patch + the patch of the patch
|
[17:32] pieterh
|
ok, since I applied the original patch manually I want to know if there's a shortcut
|
[17:32] pieterh
|
or if it's safer to redo that work
|
[17:33] sustrik
|
just use your existing codebase
|
[17:33] sustrik
|
and fix the 2 issues i've mentioned
|
[17:34] pieterh
|
ok
|
[17:34] pieterh
|
so if I do a diff of the two patches it will tell me what to actually change... :)
|
[17:35] pieterh
|
yeah, that does the trick
|
[17:35] pieterh
|
ok, will apply this, test, and let you know
|
[17:35] pieterh
|
am taking the kids for pizza now... bbl
|
[17:35] sustrik
|
cyl
|
[18:06] staylor
|
is it possible to both bind and connect with the same socket?
|
[18:09] Guthur
|
can't think why you would even want to do that
|
[18:09] sustrik
|
yes, it's possible
|
[18:10] sustrik
|
you can bind and connect as many times as you want
|
[18:14] staylor
|
okay, the reason I need to do that is I have many nodes that need to connect to each other to transfer session data. but depending on which can open a port for nat one node needs to bind or connect to his peer.
|
[18:14] staylor
|
I'm using a client and host socket right now, but a single socket to both bind and connect would be a lot cleaner if that's valid.
|
[18:18] staylor
|
should I be concerned about connecting to the same host twice? I could keep track of which I connected to but these connections are mostly few and far between.
|
[18:24] Guthur
|
oh, i miss understood, i read that as I bind and connect to the same address
|
[18:24] Guthur
|
with the same sockeet
|
[18:26] taotetek
|
anyone have a moment to help me find some clarity in regards to HWM options w/ PUSH / PULL socket types?
|
[18:27] sustrik
|
staylor: connecting twice means that the two connections will be treated as such
|
[18:27] sustrik
|
so for example you would get every message twice with a PUB/SUB sockets
|
[18:27] sustrik
|
taotetek: yes?
|
[18:28] taotetek
|
sustrik: so... (using pyzmq) .. if I set up a PUSH socket, and there are no PULL's connected, it blocks, which is what I expect
|
[18:29] taotetek
|
I'm looking at this passage in the documentation: "When a ZMQ_PUSH socket enters an exceptional state due to having reached the high water mark for all downstream nodes, or if there are no downstream nodes at all, then any zmq_send(3) operations on the socket shall block until the exceptional state ends"
|
[18:29] sustrik
|
yes
|
[18:29] taotetek
|
but I haven't been able to cause the PUSH socket to become blocked on a send
|
[18:29] taotetek
|
(unless no PULL sockets are connected)
|
[18:29] taotetek
|
so I'm either setting something wrong or not understanding what I'm reading
|
[18:29] sustrik
|
that's because messages are sent to the PULL socket in parallel
|
[18:30] sustrik
|
so you never reach the HWM
|
[18:30] sustrik
|
you can set the HWM on PULL socket
|
[18:30] sustrik
|
if you won't read from it
|
[18:30] sustrik
|
the HWM on the PULL socket would be reached
|
[18:31] sustrik
|
then the recv-side TCP buffer will be filled
|
[18:31] sustrik
|
then send-side TCP buffer will be filled
|
[18:31] sustrik
|
then PUSH socket buffer will reach HWM
|
[18:31] taotetek
|
ok.. so if I.. 1. set up a PULL socket with a HWM of 1, 2. set up a PUSH socket, 3. send from the PUSH socket but don't recv on the PULL
|
[18:31] sustrik
|
and block
|
[18:31] taotetek
|
then it will block once the tcp buffer is full
|
[18:31] taotetek
|
(and the tcp buffer could conceivably be larger than a single message?)
|
[18:32] sustrik
|
sure
|
[18:32] taotetek
|
which would be why I'm not seeing an immediate block
|
[18:32] sustrik
|
the default on linux iirc is 128kB
|
[18:32] taotetek
|
aha! ok I'll whip up a quick test
|
[18:32] taotetek
|
thank you sustrik, that's enormously helpful information
|
[18:32] sustrik
|
you are welcome
|
[18:33] staylor
|
sustrik, okay so if I have two xrep sockets x1,x2 where x1 binds and x2 connects twice, any message would go to x2 twice?
|
[18:34] taotetek
|
sustrik: and that makes perfect sense. it's easy when working with zmq to forget that it's still TCP under the hood sometimes I think, because it makes it so ridiculously easy to be "message" oriented.
|
[18:34] sustrik
|
staylor: nope, req/rep pattern sends message to a single connection
|
[18:35] sustrik
|
what'll you see would be load-balancing between the connections
|
[18:35] sustrik
|
and thus possible re-ordering of messages
|
[18:35] staylor
|
then x2 being the same socket connected twice to the same host would just receive a single message then
|
[18:36] sustrik
|
yes
|
[18:36] sustrik
|
with possible reordering
|
[18:36] staylor
|
alright
|
[18:36] staylor
|
my worry was that I want to know if I should check before connecting if I'm already connected to that host or just go ahead and connect regardless
|
[18:37] staylor
|
my network is effectively a mesh of xrep sockets which all bind, and then will also connect to the host they need to message.
|
[18:40] Guthur
|
ian barbers PHP presentation is very good in regards stable/unstable parts of your arch
|
[18:40] Guthur
|
worth watching, though it is nearly an hour long
|
[18:42] staylor
|
"ZeroMQ is the answer" video on the website?
|
[18:43] sustrik
|
i would recomment watching it as well
|
[18:43] sustrik
|
connecting every component to every other component using XREP sockets doesn't sound like an ideal architecture
|
[18:44] staylor
|
my problem is I want to have a single bind per node since they require opening a port over upnp, there's only a few nodes that communicate to each other though.
|
[18:45] Guthur
|
staylor, yep
|
[18:45] staylor
|
this might be in the video so let me know if I'm asking something already answered, but what would a 'smarter' architecture be for dealing with this problem?
|
[18:46] Guthur
|
when you add a bind to a node it becomes a stable node
|
[18:46] Guthur
|
though I think static is a better term
|
[18:47] Guthur
|
whereas if a node only connects to other static nodes it is unstable, or dynamic, can come and go
|
[18:47] Guthur
|
Ian explains it way better than me though
|
[18:47] staylor
|
that's why I bind to nodes that are able to open upnp ports, other nodes connect, there's a server that acts as a sync to let two peers decide which will bind and which will connect
|
[18:47] Guthur
|
with pretty pictures and everything
|
[18:48] staylor
|
I consider a upnp enabled node to be static
|
[18:50] th
|
pieterh: what i said earlier - was not correct, the pure-c example is not failing earlier. the behaviour is the same as with c++
|
[18:51] th
|
pieterh: http://thzn.de/0mq-mp-mix-pure-c/ thats the latest testcase
|
[19:11] th
|
i switched from 2.1 to 3.0 now. i changed zmq_{send,recv} to zmq_{send,recv}msg and it compiles again. but i get a 'errno: 11 (Resource temporarily unavailable)' on sending
|
[19:15] th
|
which is EAGAIN - but i did not choose NONBLOCKING
|
[22:10] Seta00
|
I just watched the ZeroMQ is the Answer talk, and it really is worth watching
|