[zeromq-dev] PUB sent, but SUB can not receive.
Roy Liu
liuchuanbo at gmail.com
Thu Aug 15 02:45:39 CEST 2013
Ric,
Thank you for your kindly advice.
I'll have a try.
Roy.
On Thu, Aug 15, 2013 at 3:25 AM, <Richard_Newton at waters.com> wrote:
> You will need to serialise it somehow.
>
> We use protocol buffers (from google), but other options are things like
> thrift (from facebook), message pack or many others.
>
> If you don't want to use any of the existing ones you could hack your own
> up, but this will get old real quick, something like (untested):
>
> std::string serialised = wd.Symbol + "," + wd.Time;
> zmq::message_t msg(serialised.size());
> memcpy(msg.data(), serialised.data(), serialised.size());
>
> and on the other side:
>
> std::string serialised((char*)msg.data(), (char*)msg.data() + msg.size());
> std::string::size_type commaPos = serialised.find(',');
> wd.Symbol = serialised.substr(0, commaPos );
> wd.Time= serialised.substr(commaPos +1, serialised.size() - commaPos - 1);
>
> I may well have messed up the +1 and -1 there, but you get the idea. You
> could also use std::stringstream and std::getline to make things easier.
>
> Like I say, this gets old fast so if you have a lot of structures you need
> to send I'd consider using a real serialisation mechanism.
>
> Ric.
>
>
> [image: Inactive hide details for liuchuanbo---14/08/2013 04:27:58
> PM---Ric, I have tried it. You're exactly right!]liuchuanbo---14/08/2013
> 04:27:58 PM---Ric, I have tried it. You're exactly right!
>
>
> From: liuchuanbo at gmail.com
> To: "ZeroMQ development list" <zeromq-dev at lists.zeromq.org>,
> Cc: zeromq-dev-bounces at lists.zeromq.org
> Date: 14/08/2013 04:27 PM
>
> Subject: Re: [zeromq-dev] PUB sent, but SUB can not receive.
> Sent by: zeromq-dev-bounces at lists.zeromq.org
> ------------------------------
>
>
>
> Ric,
>
> I have tried it. You're exactly right!
>
> OS is the Windows here.
> Actually, WData.Symbol is all less than 16 characters, and WData.Time is
> all more than 16 characters(like 2013-08-08 10:00:00).
> When I set WData.Symbol to more than 16 chars manually, pointer failed.
>
> Please tell me how to resolve this thing?
>
> BTW, the WData struct can not be changed.
>
> Roy.
>
> On Aug 14, 2013, at 10:36 PM, *Richard_Newton at waters.com*<Richard_Newton at waters.com>
> wrote:
>
>
> Is this on windows?
>
> If so the stl implementation on widows (and clangs implementation, but
> not gcc) uses something called the small string optimisation, any string
> less than or equal to 16 characters will be stored within the string class
> itself so will copy over, anything more than 16 characters will be
> allocated on the heap and string will keep a pointer to it, this will not
> be copied over.
>
> So try a symbol with more than 16 characters and it will probably fail.
>
> Ric.
>
>
> <graycol.gif>liuchuanbo---14/08/2013 01:59:43 PM---Hi, Ric Right,
> string is std::string.
>
> From: *liuchuanbo at gmail.com* <liuchuanbo at gmail.com>
> To: "ZeroMQ development list" <*zeromq-dev at lists.zeromq.org*<zeromq-dev at lists.zeromq.org>>,
>
> Cc: *zeromq-dev-bounces at lists.zeromq.org*<zeromq-dev-bounces at lists.zeromq.org>
> Date: 14/08/2013 01:59 PM
> Subject: Re: [zeromq-dev] PUB sent, but SUB can not receive.
> Sent by: *zeromq-dev-bounces at lists.zeromq.org*<zeromq-dev-bounces at lists.zeromq.org>
>
> ------------------------------
>
>
>
> Hi, Ric
>
> Right, string is std::string.
> Why Symbol(also std::string) has the correct string and Time NOT?
>
> I'm debugging now, WData.Time is ""(a empty string).
>
> On Aug 14, 2013, at 8:54 PM, *Richard_Newton at waters.com*<Richard_Newton at waters.com>
> wrote:
>
> Is string here a std::string? If so you cannot do this as
> std::string uses more memory internally,
>
> You'll need either a struct that uses just data arrays like:
>
>
> typedef struct tag_WData
> {
> charTime[100];
> char Symbol[100];
> } WData;
>
> Or use some serialisation mechanism such as protocol buffers.
>
> Ric.
>
>
>
> <graycol.gif>liuchuanbo---14/08/2013 01:45:26 PM---Hi, everyone My
> problem is as the following:
>
> From: *liuchuanbo at gmail.com* <liuchuanbo at gmail.com>
> To: *zeromq-dev at lists.zeromq.org* <zeromq-dev at lists.zeromq.org>,
> Date: 14/08/2013 01:45 PM
> Subject: [zeromq-dev] PUB sent, but SUB can not receive.
> Sent by: *zeromq-dev-bounces at lists.zeromq.org*<zeromq-dev-bounces at lists.zeromq.org>
>
> ------------------------------
>
>
>
> Hi, everyone
> My problem is as the following:
>
> typedef struct tag_WData
> {
> string Time;
> string Symbol;
> } WData;
> *
>
> On the PUB side. I can get WData.Time.*
>
> void OnData(WData wd)
> {
> // PUB Socket send ticker message to subscriber
> int msgSize = sizeof(WData);
> zmq::message_t message(msgSize);
> memcpy ((void *) message.data(), &wd, msgSize);
>
> publisher.send(message);
> }
> *
>
> However, on the SUB side, it's very wired that I can NOT get **WData.Time,
> but WData.Symbol is correct.*
>
> int main (int argc, char *argv[])
> {
> zmq::context_t context (1); // only 1 io_threads
> zmq::socket_t subscriber (context, ZMQ_SUB);
> subscriber.connect("*tcp://localhost:5556*");
>
> subscriber.setsockopt(ZMQ_SUBSCRIBE, NULL, 0);
>
> WData *msg;
> while(true){
> zmq::message_t message(sizeof(WData));
> subscriber.recv(&message);
> msg = (WData *) message.data();
>
> // it's ERROR here. error message: Bad ptr
> cout << msg->Time << endl;
> }
>
> return 0;
> }
>
> Why?
> Thanks!
>
> _______________________________________________
> zeromq-dev mailing list*
> **zeromq-dev at lists.zeromq.org* <zeromq-dev at lists.zeromq.org>*
> **http://lists.zeromq.org/mailman/listinfo/zeromq-dev*<http://lists.zeromq.org/mailman/listinfo/zeromq-dev>
>
>
> ===========================================================
> The information in this email is confidential, and is intended
> solely for the addressee(s).
> Access to this email by anyone else is unauthorized and therefore
> prohibited. If you are
> not the intended recipient you are notified that disclosing,
> copying, distributing or taking
> any action in reliance on the contents of this information is
> strictly prohibited and may be unlawful.
> ===========================================================
>
> _______________________________________________
> zeromq-dev mailing list*
> **zeromq-dev at lists.zeromq.org* <zeromq-dev at lists.zeromq.org>*
> **http://lists.zeromq.org/mailman/listinfo/zeromq-dev*<http://lists.zeromq.org/mailman/listinfo/zeromq-dev>
> _______________________________________________
> zeromq-dev mailing list*
> **zeromq-dev at lists.zeromq.org* <zeromq-dev at lists.zeromq.org>*
> **http://lists.zeromq.org/mailman/listinfo/zeromq-dev*<http://lists.zeromq.org/mailman/listinfo/zeromq-dev>
>
>
> ===========================================================
> The information in this email is confidential, and is intended solely
> for the addressee(s).
> Access to this email by anyone else is unauthorized and therefore
> prohibited. If you are
> not the intended recipient you are notified that disclosing, copying,
> distributing or taking
> any action in reliance on the contents of this information is strictly
> prohibited and may be unlawful.
> ===========================================================
>
> _______________________________________________
> zeromq-dev mailing list*
> **zeromq-dev at lists.zeromq.org* <zeromq-dev at lists.zeromq.org>
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
> ===========================================================
> The information in this email is confidential, and is intended solely for the addressee(s).
> Access to this email by anyone else is unauthorized and therefore prohibited. If you are
> not the intended recipient you are notified that disclosing, copying, distributing or taking
> any action in reliance on the contents of this information is strictly prohibited and may be unlawful.
> ===========================================================
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130815/a5ef5cbc/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20130815/a5ef5cbc/attachment.gif>
More information about the zeromq-dev
mailing list