Existem diferentes formas de chat, por isso a resposta varia de acordo com a implementação / website. Os métodos primários são o chat "cliente-cliente" direto, no qual o site fornece a interface do aplicativo e facilita um aperto de mão para apresentar dois usuários uns aos outros (você não sabe como se conectar à pessoa B, eles não saber como se conectar a você, mas ambos sabem como se conectar ao site, e o site negocia os dois se conectando uns aos outros). Isso tem um enorme benefício para os operadores do site, pois é um empate para eles (vá para o meu site e você pode conversar), mas eles não estão sobrecarregados com a sobrecarga de realmente lidar / passar todo o tráfego.
O outro método mais visto é mais parecido com o que você estava pensando originalmente. Você pode usar o Facebook como um exemplo disso. Você envia uma mensagem e vai para o servidor do site, é registrado em seus registros, armazenado em seus bancos de dados, etc. A mensagem também é enviada para os destinatários por estar disponível no banco de dados quando o aplicativo da pessoa B executa uma pesquisa. Há ganchos e retornos de chamada que permitem ao destinatário saber que uma nova mensagem está aguardando, e o aplicativo faz o download assim que é notificado, dando a aparência de mensagem direta instantânea; mas na realidade tudo isso é servido como conteúdo pelo site de hospedagem.
Um fácil dizer. Mensagens diretas de cliente para cliente não terão histórico que o siga para diferentes navegadores (o aplicativo pode armazenar o histórico de bate-papo na máquina local, mas não seguirá para uma máquina diferente porque essa outra máquina não fazia parte do comunicação direta original). Bate-papo roteado / armazenado em um site na maioria das vezes tem histórico de conversas anteriores que o seguirão (porque todos os bate-papos são enviados e salvos no site, novamente o Facebook é um ótimo exemplo).