我想展示到目前为止的想法,并说现在我有一个客户端(订户)可以连接并向服务器发送消息(订户和编辑之间的中介)。

我有一个列表,在其中存储订户可以订阅的每个主题,以及该列表中每个节点的订户列表。

截至目前,订户可以注册或退出主题。现在,我的问题是通知编辑者何时生成事件的每个主题。

为此,我仔细考虑了该事件的主题列表,并向该主题的每个订阅者发送了一条消息,订阅者得到该消息后,他已得到通知。

但是,仅以现在我能想到的方式做,就是要有类似以下代码的内容:

int sock_tcp;
struct sockaddr_in  dir_tcp_srv;
sock_tcp=socket(AF_INET,SOCK_STREAM,0);
if(sock_tcp<0)
{
  fprintf(stdout,"ERROR\n");
  exit(1);
}

bzero((char*)&dir_tcp_srv,sizeof(struct sockaddr_in));
dir_tcp_srv.sin_family=AF_INET;
dir_tcp_srv.sin_addr.s_addr=inet_addr(address_previously_stored);
dir_tcp_srv.sin_port=htons(port_previously_stored);
if(connect(sock_tcp,
     (struct sockaddr*)&dir_tcp_srv,
     sizeof(struct sockaddr_in))<0)
{

  perror("CONNECT error");
  close(sock_tcp); exit(1);
}


例如,我将其放在一个函数上(这是我当前用于将订户连接到中间过程的代码),并给它两个地址和端口之类的参数,然后遍历该列表,每次以不同的方式调用此代码参数。

对我来说,这似乎有些愚蠢,就像我缺少某种要点或概念一样,因为我一直都在使用相同的代码,这似乎有些浪费。我相信使用不同的实现方式,我可以进行某种形式的广播,而订户只会获取信息,但这是一种“推送”订户-编辑器模式,因此,我相信我的想法是适合该想法的一种(而不是从订阅者,只要他想要该信息等等)。

最佳答案

TCP是一种具有2个端点并且面向连接的对等协议。
如果您坚持使用TCP作为通信机制,则必须迭代所有订户建立的连接,发送和关闭,因为TCP不是多播。

如果要使用UDP,则可以轻松广播此消息,但即使如此,您也只能局限在子网的边界内。

10-06 02:39