php5-fpm otimização para longo polling

1

Estou criando um aplicativo de chat em PHP. Eu uso o nginx com o ambiente php-fpm. O problema é que, depois de vários clientes conectados, os scripts PHP estão ficando muito lentos.

Tenho apenas vários clientes (5-10) conectados e a pesquisa longa está definida para 30 segundos. O Nginx serve conteúdo estático como imagens ou estilos instantaneamente, mas para scripts PHP são necessários quase 5 segundos para carregar. Eu usei o XDebug para criar o perfil do código, mas ele me diz que o script que carregou 5 segundos levou apenas 100 ms, o que é confuso.

Acho que o php5-fpm enfileira os pedidos recebidos, o que causa esses atrasos. Existe algo que eu deveria saber sobre a configuração do php5-fpm ao usar long poll? Eu gostaria de enfatizar que fica muito lento quando ~ 5 clientes estão usando o chat.

Problema semelhante: link ( um script PHP de longa duração bloqueia todas as outras solicitações PHP )

Isso também pode estar conectado: link

    
por stil 23.02.2014 / 21:52

2 respostas

1

A criação de aplicativos em tempo real com php nua não é uma opção muito boa, especialmente quando você precisa fazer longas pesquisas. Você poderia fazer algumas afinações, mas mais cedo ou mais tarde (por exemplo, com 150 clientes conectados), você terá que mudar sua arquitetura.

A consulta longa também requer acesso contínuo ao banco de dados, a fim de descobrir quando uma nova mensagem para um usuário foi enviada. Isso pode ser um exagero, quando você tem mais de 5 a 10 usuários, e essa é provavelmente a razão pela qual, após 5 a 10 clientes, seu servidor começa a ficar mais lento.

Eu sugiro que você use um servidor nodejs separado com o socket.io para o aplicativo em tempo real, o seu funciona muito bem e pode manipular milhares de conexões simultâneas sem nenhum problema. Ele contém excelentes opções de configuração e também suporta websockets ou long polling baseado nas capacidades do cliente conectado

Você pode dar uma olhada em socket.io

Além disso, para enviar mensagens (envio de conteúdo) do php para o servidor node.js para o servidor node.js, você pode usar o elephant.io biblioteca

    
por 24.02.2014 / 11:15
1

Talvez você não tenha funcionários suficientes em sua configuração do PHP-FPM. Eu costumo seguir esta regra ao configurar meu php-fpm, vá com uma configuração dynamic pm em vez de static :

pm = dynamic

pm.max_spare_servers = total cpu cores

pm.start_servers = (0.25 * total cpu cores)

pm.min_spare_servers = (0.5 * total cpu copres)

pm.max_children = 64 

Quanto maior pm.max_children esse número, mais memória RAM ele consome, mas mais conexões simultâneas você pode manipular. Se você está com pouca memória RAM, deve considerar lowring pm.max_chidren e mudar para dynamic pm em vez de static.

Se você escolher definir seu pm no modo ondemand e não un dynamic , para que sua pesquisa longa funcione propriamente, certifique-se de que esse valor seja alto o suficiente: pm.process_idle_timeout = 45s; normalmente deixo o padrão 10s, mas você deve tentar 30s aussuming que sua janela de pesquisa é 30s.

Para mais informações sobre como configurar o PHP-FPM: você pode verificar a documentação oficial neste endereço: link

    
por 28.02.2014 / 18:07