如何在ZeroMQ套接字中检索和存储随机UUID-s?

时间:2014-09-18 08:59:20

标签: sockets zeromq

我需要在多个客户端之间进行通信。当我尝试运行文件(多个终端)时,我得到相同的身份。所以我让路由器套接字自动设置UUID。但是我发现我无法使用该身份存储在服务器上以便在多个客户端之间进行路由。

我如何处理多个客户端ID?

我正在尝试构建异步聊天服务器。我正在遵循每个客户的方法,经销商套接字连接到服务器( ROUTER 类型的套接字)。然后,服务器提取客户端ID(手动设置)并相应地读取消息和路由。

#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 个答案:

答案 0 :(得分:1)

备忘录

几十年来,已经证明,基于所有收集的要求,即在编码之前设计一个系统,而不是相反。

通过这种方式,您的分析将在决定消息传递和信令层之前列出所有要求,避免出现“并且我还想添加此消息......”

UUID

如果您决定在每个客户端创建一次性或持久性 UUID -s,那么您将面临挑战,以确保时间唯一性和时间性。随机化。

如果您决定从ChatSERVER端分配 UUID -s,除了聊天传输之外,您还需要一个额外的信号层。

在没有您确定的其他要求的情况下(或者迟早会意识到面对他们,即时),回答“如何处理多个客户ID”是不可接听的

时间就是金钱

如上所述,良好的项目始于适当且彻底的需求工程&amp;验证。与“基于Aha的&amp;故障排除响应工程”相比,产品编码的时间跨度最短。