Chrome trava após certa quantidade de dados transferidos - esperando por soquete disponível

101

Eu tenho um jogo de navegador e recentemente comecei a adicionar áudio ao jogo.

O Chrome não carrega a página inteira, fica travado "91 requests | 8.1 MB transferred"e não carrega mais conteúdo; e até quebra o site em todas as outras guias, dizendo Waiting for available socket.

Após 5 minutos (exatamente), os dados são carregados.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Isso não acontece em nenhum outro navegador.

Remover um arquivo MP3 (o último adicionado) resolveu o problema, então talvez seja um problema de limite de dados?

Foxhoundn
fonte
1
Você arquivou ou encontrou um relatório de bug para isso? Nós estamos vendo exatamente o mesmo comportamento (necessidade de verificar se o # de solicitações ou transferidos bytes combinados, mas caso contrário, o comportamento e as partidas de erro exatamente)
Jan
1
Parece um problema conhecido - consulte code.google.com/p/chromium/issues/detail?id=324653 Dê uma olhada em code.google.com/p/chromium/issues/detail?id=324653 o que exatamente está acontecendo. Mas se você está atingindo um limite de soquetes abertos, então, na verdade, até mesmo outros navegadores têm limite no número de conexões para um único domínio. Você tem duas opções - certifique-se de ter apenas algumas solicitações simultâneas ativas (serializar; não paralelizar); ou divida seu servidor em subdomínios e emita solicitações para diferentes subdomínios.
janeiro de
5
Caso de nicho, mas se você reiniciou o Chrome recentemente e tem várias guias abertas para um servidor que requer autenticação HTTP básica, você pode receber esses erros porque uma de suas guias de plano de fundo abriu uma caixa de diálogo de autenticação. Verifique todas as outras guias abertas do site em questão, faça o login conforme necessário e veja se o problema foi resolvido.
Nathaniel Heinrichs
Alguém sabe que extensão é essa para rastrear esses dados que ele forneceu na imagem?
AlexioVay
2
@NathanielHeinrichs +1 para o "caso de nicho" que tem me incomodado nas últimas 2 semanas. É exatamente o que está acontecendo comigo, e agora eu sei por quê! Obrigado.
Marcus

Respostas:

68

Parece que você está atingindo o limite de conexões por servidor. Vejo que você está carregando muitos arquivos estáticos e meu conselho é separá-los em subdomínios e servi-los diretamente com o Nginx, por exemplo.

  • Crie um subdomínio chamado img.seusite.com e carregue todas as suas imagens a partir dele.

  • Crie um subdomínio chamado scripts.yourdomain.com e carregue todos os seus arquivos JS e CSS a partir daí.

  • Crie um subdomínio chamado sounds.yoursite.com e carregue todos os seus MP3s de lá ... etc.

Nginx tem ótimas opções para servir diretamente arquivos estáticos e gerenciar o cache de arquivos estáticos.

Predte4a
fonte
11
Isso não muda nada. Basta colocar alguns domínios falsos em seu arquivo hosts e usá-los em vez de localhost.
Predte4a 01 de
Não é uma opção para mim. Estou tentando veicular vídeos do meu servidor doméstico pela web (quando estou no trabalho).
Sridhar Sarnobat
4
No caso de httpd (ou seja, apache) pode lidar com centenas de sim. conexões e apenas o Crome está limitando-as, isso não é uma solução. No meu caso são 6 sockets por perfil, então posso abrir mais 6 no perfil anônimo, etc. Esta é uma solução stackoverflow.com/a/29639535/904846 que pode ser aceita como a melhor resposta.
dmnc
145

Explicação:

Esse problema ocorre porque o Chrome permite até 6 conexões abertas por padrão. Portanto, se você estiver transmitindo vários arquivos de mídia simultaneamente de 6 <video>ou <audio>tags, a 7ª conexão (por exemplo, uma imagem) irá apenas travar, até que um dos soquetes se abra. Normalmente, uma conexão aberta será fechada após 5 minutos de inatividade, e é por isso que você está vendo seus .pngs finalmente carregando naquele ponto.

Solução 1:

Você pode evitar isso minimizando o número de marcas de mídia que mantêm uma conexão aberta. E se precisar de mais de 6, certifique-se de carregá-los por último, ou de que não tenham atributos como preload="auto".

Solução 2:

Se você estiver tentando usar vários efeitos sonoros para um jogo da web, poderá usar a API de áudio da web . Ou para simplificar as coisas, basta usar uma biblioteca como SoundJS , que é uma ótima ferramenta para reproduzir uma grande quantidade de efeitos sonoros / faixas de música simultaneamente.

Solução 3: Sockets de abertura forçada (não recomendado)

Se necessário, você pode forçar a abertura dos soquetes em seu navegador (somente no Chrome):

  1. Vá para a barra de endereço e digite chrome://net-internals.
  2. Selecione Socketsno menu.
  3. Clique no Flush socket poolsbotão.

Esta solução não é recomendada porque você não deve esperar que seus visitantes sigam estas instruções para poder visualizar seu site.

Marquizzo
fonte
13
Embora a resposta aceita forneça informações geralmente boas, esta é a melhor resposta.
taco
1
Acabei de instalar o Neo4J 3.0.4 e ao abrir o localhost: 7474 diz aguardando soquetes disponíveis, tentei flush ainda não está funcionando e na lista de pool diz 6 ativos e 2 pendentes para este site
Adeem
Esvaziar pools de soquete também não está funcionando para mim (estou reproduzindo pequenas partes de vários <video>elementos HTML5 e atingindo o limite.
Sridhar Sarnobat
No meu caso havia muitas abas abertas e polling para servidor, fechei todas as abas e agora está bom.
igaurav
Nosso aplicativo legado estava solicitando imagens (zoom in / out.png etc) de um servidor público (que deve ter parado de ser suportado - levando a muitos relatórios de erro). Todas as solicitações para esse servidor estavam travadas como "Pendente" no Chrome e ele só enviaria de volta um código de status HTTP 502 após cerca de dois minutos. Isso deixou o aplicativo travado e incapaz de solicitar imagens de nosso próprio servidor, pois estava entupido solicitando essas imagens. Ótima resposta - me ajudou a rastrear isso!
Francis Dean
13

A mensagem:

Aguardando soquete disponível ...

é mostrado, porque você atingiu um limite em ssl_socket_pool por Host, Proxy ou Grupo.

Aqui está o número máximo de conexões HTTP que você pode fazer com um navegador Chrome:

  • O número máximo de conexões por proxy é 32 conexões. Isso pode ser alterado na Lista de políticas .
  • Máximo por Host: 6 conexões.

    Isso provavelmente está codificado no código-fonte do navegador da web, portanto, você não pode alterá-lo.

  • Total de 256 conexões HTTP agrupadas por navegador.

Fonte: rede corporativa para dispositivos Chrome

Os limites acima podem ser verificados ou liberados em chrome://net-internals/#sockets(ou em tempo real em chrome://net-internals/#events&q=type:SOCKET%20is:active).


Seu problema com áudio pode estar relacionado ao bug do Chrome 162627, em que o áudio HTML5 falha ao carregar e atinge o máximo de conexões simultâneas por servidor: proxy. Este é um problema ainda ativo no momento da redação (2016).

Um problema muito mais antigo relacionado à solicitação de vídeo HTML5 permanece pendente , então provavelmente está relacionado ao problema nº 234779, que foi corrigido em 2014. E relacionado ao SPDY, que pode ser encontrado no problema 324653: Problema SPDY: aguardando soquetes disponíveis , mas isso já foi corrigido em 2014, então provavelmente não está relacionado.

Outro problema relacionado agora marcado como duplicado pode ser encontrado no Problema 401845: Falha ao pré-carregar metadados de áudio. Carregado apenas 6 de 10+ que estava relacionado ao problema com o código do media player, deixando um monte de solicitações pausadas penduradas.


Isso também pode estar relacionado a algumas extensões de adware ou antivírus do Chrome usando seus soquetes em segundo plano (como Sophos ou Kaspersky ), portanto, verifique a atividade de rede no DevTools .

Kenorb
fonte
1
Como posso alterar 6 por servidor para 8 por servidor, pois parece que algum software que estou usando precisa de 8, resultando em 2 permanecem pendentes e o site nunca é carregado
Adeem
@Adeem Não acho que você possa mudar isso, acredito que está codificado no código-fonte. Você pode relatar esse problema descrevendo seu cenário específico.
Kenorb
1
chrome: // net-internals / # events & q = type: SOCKET% 20is: o link ativo não está atualizado no último Chrome
pyrytakala 01 de
6

solução simples e correta é desistir de pré-carregar seu arquivo de áudio e vídeo da configuração e verificar novamente sua página seu problema de espera pelo soquete disponível será resolvido ...

se você usar o jplayer, substitua o pré-carregamento: "metadados" para pré - carregar: "nenhum" do jplayer Arquivo JS ...

pré-carregamento: "metadados" é o valor padrão que reproduz seu arquivo de áudio / vídeo no carregamento da página. É por isso que o Google Chrome mostra o erro "aguardando soquete disponível"

Najam ali shahid
fonte
0

Nosso primeiro pensamento é que o site está fora do ar ou algo parecido, mas a verdade é que esse não é o problema ou a deficiência. Nem é um problema porque uma conexão simples quando testada no Firefox, Opera ou serviços Explorer abre normalmente.

O erro no Chrome exibe um sinal que diz "Este site não está disponível" e esclarecimento com a legenda "Erro 15 (net :: ERR_SOCKET_NOT_CONNECTED): Erro desconhecido". O erro é bastante comum no Google Chrome, mais precisamente em suas atualizações, e sua solução é reiniciar o computador.

Como as soluções parciais não são muito, oferecemos um tutorial para você resolver a falha em menos de um minuto. Para evitar esse problema e garantir que os serviços estejam normalmente abertos no Google Chrome, deve-se inserir o seguinte na barra de endereço: chrome: // net-internals (em seguida, digite "Enter"). Eles então têm que ir para "Socket" no menu à esquerda e escolher "Flush Socket Pools" (veja as seguintes imagens para orientar http://www.fixotip.com/how-to-fix-error-waiting-for -available-sockets-in-google-chrome / ) Isso tem o problema resolvido e não terá mais problemas para acessar o Gmail, Google ou qualquer um dos serviços da gigante de Mountain View. Espero que você tenha achado útil e compartilhe o tutorial com quem eles precisam ou nas redes sociais: Facebook, Twitter ou Google+.

John
fonte
0

O Chrome é um navegador baseado em Chromium e navegadores baseados em Chromium só permitem um máximo de 6 conexões de soquete aberto por vez. Quando a 7ª conexão for iniciada, ele ficará inativo e aguardará que um dos 6 em execução pare e então irá comece a correr. Daí o código de erro 'esperando por soquetes disponíveis' , o 7º irá esperar que um desses 6 soquetes fique disponível e então começará a funcionar.

Você também pode

Yash
fonte