How could I retrieve and store random UUID-s in ZeroMQ sockets?

让人想犯罪 __ 提交于 2019-12-12 10:08:07

问题


I need to communicate between multiple clients. When I try to run file (multiple terminals) I get same identity. So I let router socket to automatically set the UUID. But what I found I cannot use that identity to store at server for routing between multiple clients.

How would I handle multiple clients IDs?

I am trying to build an asynchronous Chat server. I am following an approach of each client with dealer socket connects to server ( ROUTER-type sockets ). Server then extract the clients IDs ( set manually ) and reads the message and route accordingly.

#include "zhelpers.hpp"
#include <iostream>
#include <string>
int main(void) {
    zmq::context_t context(1);
    zmq::socket_t backend (context, ZMQ_DEALER);
    backend.setsockopt( ZMQ_IDENTITY, "mal2", 4);
    backend.connect("tcp://localhost:5559");

    std::string input;
    std::cout <<"you are joinning" << std::endl;

    while(1){
        getline (std::cin, input);
        s_send (backend, input);
        zmq::pollitem_t items [] = {
            { backend, 0, ZMQ_POLLIN, 0 }
        };
        zmq::poll (items, 1, -1);
        if (items [0].revents & ZMQ_POLLIN) {
            std::string identity = s_recv (backend);
            std::string request = s_recv (backend);//receive reply back from router which might be other client
            std::cout<<"identity="<<identity<<"reques="<<request<<std::endl;
        }   //ending if                               
    }//ending while
    return 0;
}

回答1:


Memento

It has been proved by decades to rather design a system based on all collected requirements, i.e. before coding, not vice versa.

This way your analysis will list all the requirements before deciding on messaging and signalling layer, avoiding situations "And also I want to add this and that ..."

UUID

If you decide to create a disposable or persistent UUID-s on each client side, you face a challenge to ensure both temporal uniqueness & randomisation.

If you decide to assign UUID-s from a ChatSERVER side, you need an additional signalling layer, besides the chat-transport.

Answer to "How would I handle multiple clients ID" is not answer-able without the other requirements you are sure to have ( or will sooner or later realise to face 'em, on-the-fly )

Time is money

As said above, good projects start with proper and thorough requirements engineering & validation. The product coding than spans a minimum amount of time, compared to a "Aha-based & trouble-shooting responsive engineering".



来源:https://stackoverflow.com/questions/25908366/how-could-i-retrieve-and-store-random-uuid-s-in-zeromq-sockets

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!