Je ne peux pas obtenir de wrapper zeromq c ++ pour recevoir des messages multiparber. Le même code utilisant C version C fonctionne tout simplement bien, mais cela conduit à une exception sans explications du tout avec C ++. Le code de manutention multipart est le suivant:
int _tmain(int argc, _TCHAR* argv[]) { zmq::context_t context(1); zmq::socket_t socket(context, ZMQ_REP); socket.bind("tcp://*:5555"); while(true) { // the following two lines lead to exception zmq::message_t request; socket.recv(&request); //zmq_msg_t message; //zmq_msg_init (&message); //zmq_recv (socket, &message, 0); } return 0; }
3 Réponses :
J'ai décidé d'utiliser la version C du code. En général, tous les exemples semblent être dans C de toute façon. p>
Version probable C du code ne fonctionne pas non plus, mais vous ne vérifiez pas le code de retour de ZMQ_RECV, vous ne le remarquez pas. En outre, lors de la réception de messages MILTIPART, vous devez vérifier s'il y a plus de pièces de message à recevoir via la prise, comme celle-ci:
int64_t more = 0; size_t more_size = sizeof(more); socket.getsockopt(ZMQ_RCVMORE, &more, &more_size); if (more != 0) { //has more parts }
Je suis aussi un débutant à ZMQ et j'ai aussi dû lutter beaucoup pour comprendre la messagerie multipartite en utilisant code serveur p> code client p>
J'apprécie les efforts ici, mais je suis un peu confus. Normalement, je m'attendrais à ce que le client envoie plusieurs cadres de données sur le serveur, mais c'est juste mon cas d'utilisation. Cet exemple donne un sens, mais n'autorisera qu'un seul message de trame avant Exception: l'opération ne peut pas être accompli dans l'état actuel code> J'aurais préféré un client de recevoir un ensemble de messages multi-messages après chaque touche. le serveur à titre d'exemple
On m'a dit de passer à la dernière version de ZMQ, à part cela que le code est considéré comme une bonne.