我是redis的新手,在阅读关于pub/sub的文章时,我发现pub/sub和socket有很多相似之处。我在谷歌上搜索了同一个问题,但没有得到满意的答案。请帮忙。
ckx4rj1h1#
套接字和pub/sub有本质上的不同。拓扑-套接字是点对点的,即一对一。pub/sub是多对多(many-to-many),即m-to-n,其中m和n可能是不同的,并且可以是零,因此您可以发送无人监听的消息,或者侦听无人发送的消息。broker-pub/sub需要有一个代理来转发/保留/重试消息,并管理发布者和订阅者。套接字中不涉及代理。消息定向-pub/sub是面向消息的,因此如果发布者发送10或80字节的消息,订阅者只接收10或80字节的消息。套接字是“面向流的”,因此消息的结尾没有内置的界限—只有字节流。因此,客户端套接字可以发送1000字节,然后再发送1000字节,而接收器可以接收10字节,然后3字节,然后1987字节。同步性-套接字本质上是同步的,因此接收方必须在发送方发送的同时在那里进行交互。pub/sub本质上更为异步,发布者可以发送消息,而代理可以保留消息,并在新客户端连接时稍后发送,因此发送者和接收者不一定同时存在。持久性—在套接字上发送的数据是短暂的,除非两个端点中的一个决定存储它,否则它不会存储在任何地方。发布/订阅消息可由代理存储和持久化,用于记录或重试,或将某个发布者的最后已知状态通知新连接的客户端。
1条答案
按热度按时间ckx4rj1h1#
套接字和pub/sub有本质上的不同。
拓扑-套接字是点对点的,即一对一。pub/sub是多对多(many-to-many),即m-to-n,其中m和n可能是不同的,并且可以是零,因此您可以发送无人监听的消息,或者侦听无人发送的消息。
broker-pub/sub需要有一个代理来转发/保留/重试消息,并管理发布者和订阅者。套接字中不涉及代理。
消息定向-pub/sub是面向消息的,因此如果发布者发送10或80字节的消息,订阅者只接收10或80字节的消息。套接字是“面向流的”,因此消息的结尾没有内置的界限—只有字节流。因此,客户端套接字可以发送1000字节,然后再发送1000字节,而接收器可以接收10字节,然后3字节,然后1987字节。
同步性-套接字本质上是同步的,因此接收方必须在发送方发送的同时在那里进行交互。pub/sub本质上更为异步,发布者可以发送消息,而代理可以保留消息,并在新客户端连接时稍后发送,因此发送者和接收者不一定同时存在。
持久性—在套接字上发送的数据是短暂的,除非两个端点中的一个决定存储它,否则它不会存储在任何地方。发布/订阅消息可由代理存储和持久化,用于记录或重试,或将某个发布者的最后已知状态通知新连接的客户端。