Paulo Botelho | 8 Aug 2012 17:11
Picon

[lazarus-br] FastCgi, concorrência nas chamadas

Olá Pessoal,

Sou novo no grupo e estou fazendo uns testes com o FastCgi, (fpWeb, fpFCGI) e consegui fazer os testes iniciais.

O que não consegui (e é fundamental para mim) é fazer com que aceite chamadas simultâneas/concorrentes.

Em um simples teste, tenho duas actions. a action1 faz um sleep(n) e em seguida faz a resposta normal.
A action2 simplesmente responde um texto qualquer.

Se chamar action1 e action2 simultaneamente, action2 só responde depois que action1 terminar o sleep e responder.

Alguém tem alguma sugestão de como utilizar o FastCgi em um ambiente de concorrência ?

Agradeço qualquer dica/ajuda.

Paulo Botelho

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas



Em 8 de agosto de 2012 12:11, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Olá Pessoal,

Sou novo no grupo e estou fazendo uns testes com o FastCgi, (fpWeb, fpFCGI) e consegui fazer os testes iniciais.

O que não consegui (e é fundamental para mim) é fazer com que aceite chamadas simultâneas/concorrentes.

Em um simples teste, tenho duas actions. a action1 faz um sleep(n) e em seguida faz a resposta normal.
A action2 simplesmente responde um texto qualquer.

Se chamar action1 e action2 simultaneamente, action2 só responde depois que action1 terminar o sleep e responder.

Alguém tem alguma sugestão de como utilizar o FastCgi em um ambiente de concorrência ?

Qual o servidor você está usando?

Pelo menos o apache não suporta Multiplexing: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

Acho que o fpweb também não

Com relação a concorrência, o fastcgi permite executar mais de uma instância por vez (configurável).

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 9 Aug 2012 02:19
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Olá Luiz,

Sim, estou usando o apache.

Quanto a configurar para executar mais de uma instância por vez, onde configuro ? Tentei utilizar a propriedade Kind do webmodule setando para wkPooled (na verdade é a opção default) e nada mudou.

Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que mencionei no e-mail original, onde só consigo obter uma resposta de um request após outro terminar. Fiz um segundo um pouco mais complexo, onde acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe (do próprio apache) e acompanhando as informações do bd fica sempre apenas uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho este pool de conexão testado e funcionando em uma outra app delphi.

Se tiver alguma sugestão, agradeço.

Paulo

Em 8 de agosto de 2012 20:41, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 12:11, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Olá Pessoal,

Sou novo no grupo e estou fazendo uns testes com o FastCgi, (fpWeb, fpFCGI) e consegui fazer os testes iniciais.

O que não consegui (e é fundamental para mim) é fazer com que aceite chamadas simultâneas/concorrentes.

Em um simples teste, tenho duas actions. a action1 faz um sleep(n) e em seguida faz a resposta normal.
A action2 simplesmente responde um texto qualquer.

Se chamar action1 e action2 simultaneamente, action2 só responde depois que action1 terminar o sleep e responder.

Alguém tem alguma sugestão de como utilizar o FastCgi em um ambiente de concorrência ?

Qual o servidor você está usando?

Pelo menos o apache não suporta Multiplexing: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

Acho que o fpweb também não

Com relação a concorrência, o fastcgi permite executar mais de uma instância por vez (configurável).

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
silvioprog | 9 Aug 2012 02:49
Picon
Gravatar

[lazarus-br] Re: FastCgi, concorrência nas chamadas

On 8 ago, 21:19, Paulo Botelho <ppb...@...> wrote:
[...]
> Quanto a configurar para executar mais de uma instância por vez, onde
> configuro ?

Se vc quer usar uma instância por vez então não vai mais precisar de
FastCGI, o CGI comum dá conta. :)

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas



Em 8 de agosto de 2012 21:19, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Olá Luiz,

Sim, estou usando o apache.

Quanto a configurar para executar mais de uma instância por vez, onde configuro ?


-maxProcesses http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

OBS: não use a opção FastCgiServer

 
Tentei utilizar a propriedade Kind do webmodule setando para wkPooled (na verdade é a opção default) e nada mudou.

Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que mencionei no e-mail original, onde só consigo obter uma resposta de um request após outro terminar.

Isto é o esperado
 
Fiz um segundo um pouco mais complexo, onde acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe (do próprio apache) e acompanhando as informações do bd fica sempre apenas uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho este pool de conexão testado e funcionando em uma outra app delphi.

Se tiver alguma sugestão, agradeço.


Talvez você esteja confundindo múltiplas requisições com múltiplos processos.

No FastCGI um mesmo processo pode executar várias requisições em sequencia sem ser descarregado da memória.

Além disso você pode ter mais de um processo gerando requisições simultâneas.

Pelo que entendi a sua aplicação usa estado entre requisições, ou seja, um request depende de um estado definido pelo request anterior. Tudo isso dentro da mesma execução.

Creio que com a arquitetura FastCGI você não vai conseguir fazer isto.

O modelo mais apropriado para serviços via web é o REST na qual cada requisição é independente, simplificando o desenvolvimento e minimizando a chande de bugs. Procure na net Rest ou restful

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas



Em 8 de agosto de 2012 22:13, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 21:19, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Quanto a configurar para executar mais de uma instância por vez, onde configuro ?

Para o mesmo executável a opção é -maxClassProcesses

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 10 Aug 2012 16:35
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Olá Luiz,

Lendo esta referência em : http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html


-maxProcesses : Pelo que entendi, é para limitar o nr máximo de 'executáveis' de TODOS fastcgis estartados por vez... não é isto que quero, mas de qq maneira, pelo que lí na documentação que encontrei, o default já seria 50.

-maxClassProcesses : Pelo que entendi seria o máximo de instâncias a serem executadas de UM executável específico (tipo meu fast cgi)... também não é isso que quero, e de qq maneira, o default já seria 10

Enfim, as duas configurações acima são para limitar o nr de instâncias de um executável estartados ao mesmo tempo, e não é isso que quero. O que quero é apenas um executável estartado (este seria o diferencial do fastcgi), e ele internamente estartaria diferentes trheads para atender as requisições de maneira concorrente.

Em 8 de agosto de 2012 22:28, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 22:13, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 21:19, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Quanto a configurar para executar mais de uma instância por vez, onde configuro ?

Para o mesmo executável a opção é -maxClassProcesses

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Marcos Douglas | 10 Aug 2012 16:42

Re: [lazarus-br] FastCgi, concorrência nas chamadas

2012/8/10 Paulo Botelho <ppbflu@...>:
> Olá Luiz,
>
> Lendo esta referência em :
> http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html
>
> -maxProcesses : Pelo que entendi, é para limitar o nr máximo de
> 'executáveis' de TODOS fastcgis estartados por vez... não é isto que quero,
> mas de qq maneira, pelo que lí na documentação que encontrei, o default já
> seria 50.
>
> -maxClassProcesses : Pelo que entendi seria o máximo de instâncias a serem
> executadas de UM executável específico (tipo meu fast cgi)... também não é
> isso que quero, e de qq maneira, o default já seria 10
>
> Enfim, as duas configurações acima são para limitar o nr de instâncias de um
> executável estartados ao mesmo tempo, e não é isso que quero. O que quero é
> apenas um executável estartado (este seria o diferencial do fastcgi), e ele
> internamente estartaria diferentes trheads para atender as requisições de
> maneira concorrente.

Assim, é vc quem deve iniciar as thread do seu sistema.
O FastCGI só "conhece" um único processo, ou seja, a sua aplicação. Vc
quer algo ainda mais sofisticado, pelo que entendi. Neste caso VC deve
programar os detalhes, ou seja, iniciar as threads internamente à sua
aplicação.

Marcos Douglas

PS: Acho que o que vc quer é o mesmo padrão do ISAPI: única instância
(DLL) que provê acesso a TODAS as requisições. Mas nesse caso vc tem
que se preocupar com os acessos concorrentes (BD, variáveis globais,
arquivos, etc).

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Paulo Botelho | 10 Aug 2012 16:50
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Exatamente, Marcos,

Vc captou a minha intenção (acabei de postar esta colocação sobre o ISAPI/ExtPascal em outra mensagem, simultanemente enquanto vc postava esta resposta).

Era isso mesmo que queria... de maneira transparente comoé  no ISAPI... quanto à concorrência, trato o bd com um pool de conexões, variáveis globais para ISAPI já sofri muito, praticamente não uso ou quando não tem jeito faço através de TCriticalSection...

Paulo

Em 10 de agosto de 2012 11:42, Marcos Douglas <md-mQFPSOwWvpzR7s880joybQ@public.gmane.org> escreveu:
2012/8/10 Paulo Botelho <ppbflu <at> gmail.com>:
> Olá Luiz,
>
> Lendo esta referência em :
> http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html
>
> -maxProcesses : Pelo que entendi, é para limitar o nr máximo de
> 'executáveis' de TODOS fastcgis estartados por vez... não é isto que quero,
> mas de qq maneira, pelo que lí na documentação que encontrei, o default já
> seria 50.
>
> -maxClassProcesses : Pelo que entendi seria o máximo de instâncias a serem
> executadas de UM executável específico (tipo meu fast cgi)... também não é
> isso que quero, e de qq maneira, o default já seria 10
>
> Enfim, as duas configurações acima são para limitar o nr de instâncias de um
> executável estartados ao mesmo tempo, e não é isso que quero. O que quero é
> apenas um executável estartado (este seria o diferencial do fastcgi), e ele
> internamente estartaria diferentes trheads para atender as requisições de
> maneira concorrente.

Assim, é vc quem deve iniciar as thread do seu sistema.
O FastCGI só "conhece" um único processo, ou seja, a sua aplicação. Vc
quer algo ainda mais sofisticado, pelo que entendi. Neste caso VC deve
programar os detalhes, ou seja, iniciar as threads internamente à sua
aplicação.

Marcos Douglas

PS: Acho que o que vc quer é o mesmo padrão do ISAPI: única instância
(DLL) que provê acesso a TODAS as requisições. Mas nesse caso vc tem
que se preocupar com os acessos concorrentes (BD, variáveis globais,
arquivos, etc).

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Marcos Douglas | 10 Aug 2012 17:01

Re: [lazarus-br] FastCgi, concorrência nas chamadas

2012/8/10 Paulo Botelho <ppbflu@...>:
> Em 10 de agosto de 2012 11:42, Marcos Douglas <md@...> escreveu:
>>
>> 2012/8/10 Paulo Botelho <ppbflu@...>:
>> > Olá Luiz,
>> >
>> > Lendo esta referência em :
>> > http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html
>> >
>> > -maxProcesses : Pelo que entendi, é para limitar o nr máximo de
>> > 'executáveis' de TODOS fastcgis estartados por vez... não é isto que
>> > quero,
>> > mas de qq maneira, pelo que lí na documentação que encontrei, o default
>> > já
>> > seria 50.
>> >
>> > -maxClassProcesses : Pelo que entendi seria o máximo de instâncias a
>> > serem
>> > executadas de UM executável específico (tipo meu fast cgi)... também não
>> > é
>> > isso que quero, e de qq maneira, o default já seria 10
>> >
>> > Enfim, as duas configurações acima são para limitar o nr de instâncias
>> > de um
>> > executável estartados ao mesmo tempo, e não é isso que quero. O que
>> > quero é
>> > apenas um executável estartado (este seria o diferencial do fastcgi), e
>> > ele
>> > internamente estartaria diferentes trheads para atender as requisições
>> > de
>> > maneira concorrente.
>>
>> Assim, é vc quem deve iniciar as thread do seu sistema.
>> O FastCGI só "conhece" um único processo, ou seja, a sua aplicação. Vc
>> quer algo ainda mais sofisticado, pelo que entendi. Neste caso VC deve
>> programar os detalhes, ou seja, iniciar as threads internamente à sua
>> aplicação.
>>
>> Marcos Douglas
>>
>> PS: Acho que o que vc quer é o mesmo padrão do ISAPI: única instância
>> (DLL) que provê acesso a TODAS as requisições. Mas nesse caso vc tem
>> que se preocupar com os acessos concorrentes (BD, variáveis globais,
>> arquivos, etc).
>
> Exatamente, Marcos,
>
> Vc captou a minha intenção (acabei de postar esta colocação sobre o
> ISAPI/ExtPascal em outra mensagem, simultanemente enquanto vc postava esta
> resposta).
>
> Era isso mesmo que queria... de maneira transparente comoé  no ISAPI...
> quanto à concorrência, trato o bd com um pool de conexões, variáveis globais
> para ISAPI já sofri muito, praticamente não uso ou quando não tem jeito faço
> através de TCriticalSection...

Talvez o pessoal do FastCGI tentou captar o melhor dos 2 mundos (CGI e ISAPI):
1- Permanência do processo em memória, melhorando em muito a performance;
2- Processos independentes, melhorando a manutenção pq não é preciso
se preocupar com processamento concorrente;

Marcos Douglas

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Luiz Americo Pereira Camara | 10 Aug 2012 17:14
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas


As menções as configurações de numero de processos etc foi para mostrar que é possivel acessos simultaneos o que voce afirmou nao ter conseguido

Com relacao ao que voce quer, voce tentou a opcao fastcgiserver ?
Ele define somente uma instancia por programa

Luiz

Em 10/08/2012 11:35, "Paulo Botelho" <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Olá Luiz,

Lendo esta referência em : http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html


-maxProcesses : Pelo que entendi, é para limitar o nr máximo de 'executáveis' de TODOS fastcgis estartados por vez... não é isto que quero, mas de qq maneira, pelo que lí na documentação que encontrei, o default já seria 50.

-maxClassProcesses : Pelo que entendi seria o máximo de instâncias a serem executadas de UM executável específico (tipo meu fast cgi)... também não é isso que quero, e de qq maneira, o default já seria 10

Enfim, as duas configurações acima são para limitar o nr de instâncias de um executável estartados ao mesmo tempo, e não é isso que quero. O que quero é apenas um executável estartado (este seria o diferencial do fastcgi), e ele internamente estartaria diferentes trheads para atender as requisições de maneira concorrente.

Em 8 de agosto de 2012 22:28, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 22:13, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 21:19, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Quanto a configurar para executar mais de uma instância por vez, onde configuro ?

Para o mesmo executável a opção é -maxClassProcesses

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 10 Aug 2012 17:24
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Sim Luiz, vc está certo...

Acho que não tinha sido claro em minha dúvida inicial, pois perguntei "...executar mais de uma instância por vez", e a sua resposta explicou exatamente o que eu perguntei...

Na verdade queria dizer que, em uma instância única,eu  não conseguia atender requisições simultâneas de maneira direta/transparente, na verdade a minha expectativa (talvez por vir do mundo ISAPI) era que por default a implementação do fastCgi do fp atendesse cada request em uma trhead separada, o que pela evolução das respostas até aqui, parece que não é assim...



Em 10 de agosto de 2012 12:14, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


As menções as configurações de numero de processos etc foi para mostrar que é possivel acessos simultaneos o que voce afirmou nao ter conseguido

Com relacao ao que voce quer, voce tentou a opcao fastcgiserver ?
Ele define somente uma instancia por programa

Luiz

Em 10/08/2012 11:35, "Paulo Botelho" <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Olá Luiz,

Lendo esta referência em : http://www.citycat.ru/doc/FastCGI/mod_fastcgi/mod_fastcgi.html


-maxProcesses : Pelo que entendi, é para limitar o nr máximo de 'executáveis' de TODOS fastcgis estartados por vez... não é isto que quero, mas de qq maneira, pelo que lí na documentação que encontrei, o default já seria 50.

-maxClassProcesses : Pelo que entendi seria o máximo de instâncias a serem executadas de UM executável específico (tipo meu fast cgi)... também não é isso que quero, e de qq maneira, o default já seria 10

Enfim, as duas configurações acima são para limitar o nr de instâncias de um executável estartados ao mesmo tempo, e não é isso que quero. O que quero é apenas um executável estartado (este seria o diferencial do fastcgi), e ele internamente estartaria diferentes trheads para atender as requisições de maneira concorrente.

Em 8 de agosto de 2012 22:28, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 22:13, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:


Em 8 de agosto de 2012 21:19, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:

Quanto a configurar para executar mais de uma instância por vez, onde configuro ?

Para o mesmo executável a opção é -maxClassProcesses

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br <at> googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
silvioprog | 10 Aug 2012 17:33
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Em 10 de agosto de 2012 12:24, Paulo Botelho <ppbflu@...> escreveu:
> Sim Luiz, vc está certo...
>
> Acho que não tinha sido claro em minha dúvida inicial, pois perguntei
> "...executar mais de uma instância por vez", e a sua resposta explicou
> exatamente o que eu perguntei...
>
> Na verdade queria dizer que, em uma instância única,eu  não conseguia
> atender requisições simultâneas de maneira direta/transparente, na verdade a
> minha expectativa (talvez por vir do mundo ISAPI) era que por default a
> implementação do fastCgi do fp atendesse cada request em uma trhead
> separada, o que pela evolução das respostas até aqui, parece que não é
> assim...

Fica tranquilo, vc nem terá que mexer em nada no seu server para fazer
isso que vc que, a cusfcgi cria um TRequest para cada request, eu
testei no Mint e enviei ele em anexo no outro email, vc testou o
código que enviei? Lembrando, a custfcgi não tem nada a ver com fpweb,
são dois mundos totalmente diferentes, a custfcgi é o motor de FastCGI
criado e mantido pelo core do FPC, a fpWeb é um pequeno framework web
(que usa CGI/FastCGI e módulo Apache) mantido pelo Michael Canneyt e
alguns outros reporters do BT.

Hoje a noite (se vc puder) testamos o demo e o projeto X em seu
server, pois fiquei curioso como vc monitora os requests. Eu monitoro
no próprio terminal e de uma forma bem medieval. :D

Na verdade minha maior curiosidade é ver como meu roteador e o brocker
para FastCGI irão se comportar em seu ambiente.

-- 
Silvio Clécio
My public projects - github.com/silvioprog

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Paulo Botelho | 10 Aug 2012 17:42
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Olá Sílvio,

Sim, copiei e colei o fonte do teste que vc enviou, fiz apenas duas modificações : Diminuí o sleep para 10000 e incluí a informação da porta :

begin
  with TApp.Create(nil) do
    try
      Port:=2015;
      Run;
    finally
      Free;
    end;
end.

Mas infelizmente o resultado foi o mesmo... ao chamar /timer... não consigo resposta do /test, até que /timer conclua seu trabalho.

Muito estranho a diferença de comportamento... Será que a diferença não é naquele tratamento que vc informa que fez de uma espécie de roteador  ? Porquê meu código só roda se eu informar a porta e o seu não veio com a porta informada ?

Abraços

Paulo

Em 10 de agosto de 2012 12:33, silvioprog <silvioprog-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Em 10 de agosto de 2012 12:24, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
> Sim Luiz, vc está certo...
>
> Acho que não tinha sido claro em minha dúvida inicial, pois perguntei
> "...executar mais de uma instância por vez", e a sua resposta explicou
> exatamente o que eu perguntei...
>
> Na verdade queria dizer que, em uma instância única,eu  não conseguia
> atender requisições simultâneas de maneira direta/transparente, na verdade a
> minha expectativa (talvez por vir do mundo ISAPI) era que por default a
> implementação do fastCgi do fp atendesse cada request em uma trhead
> separada, o que pela evolução das respostas até aqui, parece que não é
> assim...

Fica tranquilo, vc nem terá que mexer em nada no seu server para fazer
isso que vc que, a cusfcgi cria um TRequest para cada request, eu
testei no Mint e enviei ele em anexo no outro email, vc testou o
código que enviei? Lembrando, a custfcgi não tem nada a ver com fpweb,
são dois mundos totalmente diferentes, a custfcgi é o motor de FastCGI
criado e mantido pelo core do FPC, a fpWeb é um pequeno framework web
(que usa CGI/FastCGI e módulo Apache) mantido pelo Michael Canneyt e
alguns outros reporters do BT.

Hoje a noite (se vc puder) testamos o demo e o projeto X em seu
server, pois fiquei curioso como vc monitora os requests. Eu monitoro
no próprio terminal e de uma forma bem medieval. :D

Na verdade minha maior curiosidade é ver como meu roteador e o brocker
para FastCGI irão se comportar em seu ambiente.

--
Silvio Clécio
My public projects - github.com/silvioprog

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
silvioprog | 10 Aug 2012 17:55
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Em 10 de agosto de 2012 12:42, Paulo Botelho <ppbflu@...> escreveu:
> Olá Sílvio,
>
> Sim, copiei e colei o fonte do teste que vc enviou, fiz apenas duas modificações : Diminuí o sleep para
10000 e incluí a informação da porta :
>
> begin
>   with TApp.Create(nil) do
>     try
>       Port:=2015;
>       Run;
>     finally
>       Free;
>     end;
> end.
>
> Mas infelizmente o resultado foi o mesmo... ao chamar /timer... não consigo resposta do /test, até que
/timer conclua seu trabalho.
>
> Muito estranho a diferença de comportamento... Será que a diferença não é naquele tratamento que vc
informa que fez de uma espécie de roteador  ? Porquê meu código só roda se eu informar a porta e o seu não
veio com a porta informada ?
>
> Abraços
>
> Paulo

Não não... O roteador está no projeto X, esse demo aí está usando a
custfcgi pura, se ela não funcionou é pq tem alguma coisa relacionada
a configuração nela ou no seu servidor, pois no Mint funcionou de
primeira (te mostro via teamviewer mais tarde), e o Apache está com
configs defaul. Depois podemos até comprar o httpd.conf e checar as
diferenças.

Preciso ver teu ambiente, mais tarde estamos aê pelo chat! (depois é
só postar onde era a config ao pessoal)

--
Silvio Clécio
My public projects - github.com/silvioprog

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

silvioprog | 10 Aug 2012 17:57
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Em 10 de agosto de 2012 12:55, silvioprog <silvioprog@...> escreveu:
> Em 10 de agosto de 2012 12:42, Paulo Botelho <ppbflu@...> escreveu:
>> Olá Sílvio,
>>
>> Sim, copiei e colei o fonte do teste que vc enviou, fiz apenas duas modificações : Diminuí o sleep para
10000 e incluí a informação da porta :
>>
>> begin
>>   with TApp.Create(nil) do
>>     try
>>       Port:=2015;
>>       Run;
>>     finally
>>       Free;
>>     end;
>> end.
>>
>> Mas infelizmente o resultado foi o mesmo... ao chamar /timer... não consigo resposta do /test, até que
/timer conclua seu trabalho.
>>
>> Muito estranho a diferença de comportamento... Será que a diferença não é naquele tratamento que
vc informa que fez de uma espécie de roteador  ? Porquê meu código só roda se eu informar a porta e o seu
não veio com a porta informada ?
>>
>> Abraços
>>
>> Paulo
>
> Não não... O roteador está no projeto X, esse demo aí está usando a
> custfcgi pura, se ela não funcionou é pq tem alguma coisa relacionada
> a configuração nela ou no seu servidor, pois no Mint funcionou de
> primeira (te mostro via teamviewer mais tarde), e o Apache está com
> configs defaul. Depois podemos até comprar o httpd.conf e checar as
> diferenças.
>
> Preciso ver teu ambiente, mais tarde estamos aê pelo chat! (depois é
> só postar onde era a config ao pessoal)

Complementando...

Minha ideia é vc conseguir resolver o problema configurando o mínimo
possível, e usar código nativo do FPC, no caso a custfcgi, assim será
mais um usuário (programador) amadurecendo a FCL-Web. ;)

--
Silvio Clécio
My public projects - github.com/silvioprog

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Paulo Botelho | 10 Aug 2012 18:00
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Blz então... até + tarde.

Valeu !!

Em 10 de agosto de 2012 12:55, silvioprog <silvioprog-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Em 10 de agosto de 2012 12:42, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
> Olá Sílvio,
>
> Sim, copiei e colei o fonte do teste que vc enviou, fiz apenas duas modificações : Diminuí o sleep para 10000 e incluí a informação da porta :
>
> begin
>   with TApp.Create(nil) do
>     try
>       Port:=2015;
>       Run;
>     finally
>       Free;
>     end;
> end.
>
> Mas infelizmente o resultado foi o mesmo... ao chamar /timer... não consigo resposta do /test, até que /timer conclua seu trabalho.
>
> Muito estranho a diferença de comportamento... Será que a diferença não é naquele tratamento que vc informa que fez de uma espécie de roteador  ? Porquê meu código só roda se eu informar a porta e o seu não veio com a porta informada ?
>
> Abraços
>
> Paulo

Não não... O roteador está no projeto X, esse demo aí está usando a
custfcgi pura, se ela não funcionou é pq tem alguma coisa relacionada
a configuração nela ou no seu servidor, pois no Mint funcionou de
primeira (te mostro via teamviewer mais tarde), e o Apache está com
configs defaul. Depois podemos até comprar o httpd.conf e checar as
diferenças.

Preciso ver teu ambiente, mais tarde estamos aê pelo chat! (depois é
só postar onde era a config ao pessoal)

--
Silvio Clécio
My public projects - github.com/silvioprog

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
silvioprog | 14 Aug 2012 12:34
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Galera, ontem (finalmente) acessei o PC dele e vi o problema. Não é o
fpWeb, nem a FCL-Web... É que ele roda uma instância do CGI
manualmente, aí realmente complica. Falei com ele que a instância do
fcgi é feita automaticamente pelo Apache, então acredito que ele terá
que fazer alguma configuração no Apache.

Acredito que enquanto ele resolve isso o melhor seria usar CGI comum.

-- 
Silvio Clécio
My public projects - github.com/silvioprog

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

silvioprog | 14 Aug 2012 12:43
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Em 14 de agosto de 2012 07:38, Luiz Americo Pereira Camara
<luizamericop@...> escreveu:
>
> Em 14 de agosto de 2012 07:34, silvioprog <silvioprog@...> escreveu:
>>
>> Galera, ontem (finalmente) acessei o PC dele e vi o problema. Não é o
>> fpWeb, nem a FCL-Web... É que ele roda uma instância do CGI
>> manualmente, aí realmente complica. Falei com ele que a instância do
>> fcgi é feita automaticamente pelo Apache, então acredito que ele terá
>> que fazer alguma configuração no Apache.
>
>
> Se ele estiver usando o mod_fastcgi a opção é FastCgiExternalServer:
> http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
>
> Luiz

Hum... acho que ele vai responder aqui mais tarde, estou sem o Apache
aqui no momento e não sei pq, só em meu PC não consegui montar um
ambiente fcgi no Windows.

Paulo, mostra o teu httpd.conf para o Luiz, e a DLL que vc está
usando, acho que dá pra resolver por aqui mesmo (eu ia consular a
lista oficial do Apache com a ajuda do Luciano).

-- 
Silvio Clécio
My public projects - github.com/silvioprog

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Marcos Douglas | 9 Aug 2012 04:01

Re: [lazarus-br] FastCgi, concorrência nas chamadas

2012/8/8 Paulo Botelho <ppbflu@...>
>
> Olá Luiz,
>
> Sim, estou usando o apache.
>
> Quanto a configurar para executar mais de uma instância por vez, onde
> configuro ? Tentei utilizar a propriedade Kind do webmodule setando para
> wkPooled (na verdade é a opção default) e nada mudou.
>
> Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que
> mencionei no e-mail original, onde só consigo obter uma resposta de um
> request após outro terminar. Fiz um segundo um pouco mais complexo, onde
> acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe
> (do próprio apache) e acompanhando as informações do bd fica sempre apenas
> uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho
> este pool de conexão testado e funcionando em uma outra app delphi.
>
> Se tiver alguma sugestão, agradeço.

Vc pode abrir uma thread para cada requisição, utilizando o mesmo
processo em memória, ou seja, em vez de processar a requisição na app
principal (main thread) vc dispara uma thread. Assim a app estará
livre para a próxima requisição.

Veja a arquitetura do projeto ExtPascal: http://code.google.com/p/extpascal/

Marcos Douglas

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Paulo Botelho | 9 Aug 2012 18:21
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Olá Luiz e Silvio,

Vou dar uma estudada nas respostas de vocês e depois posto aqui se consegui resolver.

Grande abraço e obrigado pelas respostas.

Paulo

Em 8 de agosto de 2012 23:01, Marcos Douglas <md-mQFPSOwWvpzR7s880joybQ@public.gmane.org> escreveu:
2012/8/8 Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Olá Luiz,
>
> Sim, estou usando o apache.
>
> Quanto a configurar para executar mais de uma instância por vez, onde
> configuro ? Tentei utilizar a propriedade Kind do webmodule setando para
> wkPooled (na verdade é a opção default) e nada mudou.
>
> Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que
> mencionei no e-mail original, onde só consigo obter uma resposta de um
> request após outro terminar. Fiz um segundo um pouco mais complexo, onde
> acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe
> (do próprio apache) e acompanhando as informações do bd fica sempre apenas
> uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho
> este pool de conexão testado e funcionando em uma outra app delphi.
>
> Se tiver alguma sugestão, agradeço.

Vc pode abrir uma thread para cada requisição, utilizando o mesmo
processo em memória, ou seja, em vez de processar a requisição na app
principal (main thread) vc dispara uma thread. Assim a app estará
livre para a próxima requisição.

Veja a arquitetura do projeto ExtPascal: http://code.google.com/p/extpascal/

Marcos Douglas

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 10 Aug 2012 01:37
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas



Em 8 de agosto de 2012 23:01, Marcos Douglas <md-mQFPSOwWvpzR7s880joybQ@public.gmane.org> escreveu:
2012/8/8 Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Olá Luiz,
>
> Sim, estou usando o apache.
>
> Quanto a configurar para executar mais de uma instância por vez, onde
> configuro ? Tentei utilizar a propriedade Kind do webmodule setando para
> wkPooled (na verdade é a opção default) e nada mudou.
>
> Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que
> mencionei no e-mail original, onde só consigo obter uma resposta de um
> request após outro terminar. Fiz um segundo um pouco mais complexo, onde
> acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe
> (do próprio apache) e acompanhando as informações do bd fica sempre apenas
> uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho
> este pool de conexão testado e funcionando em uma outra app delphi.
>
> Se tiver alguma sugestão, agradeço.

Vc pode abrir uma thread para cada requisição, utilizando o mesmo
processo em memória, ou seja, em vez de processar a requisição na app
principal (main thread) vc dispara uma thread. Assim a app estará
livre para a próxima requisição.

Veja a arquitetura do projeto ExtPascal: http://code.google.com/p/extpascal/

Sim, já fiz um teste com o ExtPascal (que por sinal é um projeto muito legal) e tive o resultado esperado multi-thread, fui capaz de responder várias requisições simultâneas (sem uma travar a outra). O que , por enquanto, não consegui fazer aconter no fast-cgi usando o fpWeb puro, mas vou tentar as dicas das respostas aqui.

Paulo Botelho

Marcos Douglas

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 10 Aug 2012 16:44
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Perfeito...é isso mesmo que eu quero, e em um teste percebi que o ExtPascal faz isso de maneira transparente (da mesma maneira que o Isapi do delphi o faz)... Ou seja, basta eu fazer meus requests e cada um será 'atendido' por uma thread... blz.

Só não consegui fazer o mesmo com o fpWeb.

Paulo

Em 8 de agosto de 2012 23:01, Marcos Douglas <md <at> delfire.net> escreveu:
2012/8/8 Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>
> Olá Luiz,
>
> Sim, estou usando o apache.
>
> Quanto a configurar para executar mais de uma instância por vez, onde
> configuro ? Tentei utilizar a propriedade Kind do webmodule setando para
> wkPooled (na verdade é a opção default) e nada mudou.
>
> Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que
> mencionei no e-mail original, onde só consigo obter uma resposta de um
> request após outro terminar. Fiz um segundo um pouco mais complexo, onde
> acesso um pool de conexões com o firebird, rodo um stress usando o ab.exe
> (do próprio apache) e acompanhando as informações do bd fica sempre apenas
> uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs : Tenho
> este pool de conexão testado e funcionando em uma outra app delphi.
>
> Se tiver alguma sugestão, agradeço.

Vc pode abrir uma thread para cada requisição, utilizando o mesmo
processo em memória, ou seja, em vez de processar a requisição na app
principal (main thread) vc dispara uma thread. Assim a app estará
livre para a próxima requisição.

Veja a arquitetura do projeto ExtPascal: http://code.google.com/p/extpascal/

Marcos Douglas

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Marcos Douglas | 10 Aug 2012 16:59

Re: [lazarus-br] FastCgi, concorrência nas chamadas

2012/8/10 Paulo Botelho <ppbflu@...>:
> Em 8 de agosto de 2012 23:01, Marcos Douglas <md@...> escreveu:
>>
>> 2012/8/8 Paulo Botelho <ppbflu@...>
>>
>> >
>> > Olá Luiz,
>> >
>> > Sim, estou usando o apache.
>> >
>> > Quanto a configurar para executar mais de uma instância por vez, onde
>> > configuro ? Tentei utilizar a propriedade Kind do webmodule setando para
>> > wkPooled (na verdade é a opção default) e nada mudou.
>> >
>> > Para vc ter uma idéia, fiz dois testes : Um o mais simples, que é o que
>> > mencionei no e-mail original, onde só consigo obter uma resposta de um
>> > request após outro terminar. Fiz um segundo um pouco mais complexo, onde
>> > acesso um pool de conexões com o firebird, rodo um stress usando o
>> > ab.exe
>> > (do próprio apache) e acompanhando as informações do bd fica sempre
>> > apenas
>> > uma conexão com o bd, ou seja, não abre conexões simultâneas. Obs :
>> > Tenho
>> > este pool de conexão testado e funcionando em uma outra app delphi.
>> >
>> > Se tiver alguma sugestão, agradeço.
>>
>> Vc pode abrir uma thread para cada requisição, utilizando o mesmo
>> processo em memória, ou seja, em vez de processar a requisição na app
>> principal (main thread) vc dispara uma thread. Assim a app estará
>> livre para a próxima requisição.
>>
>> Veja a arquitetura do projeto ExtPascal:
>> http://code.google.com/p/extpascal/
>>
>> Marcos Douglas
>
> Perfeito...é isso mesmo que eu quero, e em um teste percebi que o ExtPascal
> faz isso de maneira transparente (da mesma maneira que o Isapi do delphi o
> faz)... Ou seja, basta eu fazer meus requests e cada um será 'atendido' por
> uma thread... blz.

Sim, ele faz isso de maneira transparente para o programador.
Infelizmente nem tudo é perfeito. Ainda há problemas nesse projeto:
vazamento de memória ou memleaks.
O autor quis facilitar (demais?) a vida do programador tentando
gerenciar as threads e a memória (tentando) implementar um GC (garbage
collector). Mas é muito difícil ele sincronizar o "tempo de vida" de
cada thread/objeto/widget e, por isso, ainda há problemas. Talvez a
arquitetura deva ser alterada -- como foi proposto pelo Michael, autor
do fpWeb, que gostou do projeto e mandou até patches.

Como vc vem do Delphi, vc pode dar uma olhada em outro projeto chamado
Kitto -- fork do ExPascal -- no qual o autor diz ter sanado todos (ou
boa parte) dos memleaks.

http://code.google.com/p/kitto/

Infelizmente esse projeto foi codificado visando apenas o Delphi e,
portanto, não compila no FPC, até onde eu sei.

> Só não consegui fazer o mesmo com o fpWeb.
>
> Paulo

Bem, até onde eu sei, ela não foi desenhada pra fazer isso automaticamente.

Marcos Douglas

--

-- 
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br@...
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe@...
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

silvioprog | 9 Aug 2012 02:38
Picon
Gravatar

Re: [lazarus-br] FastCgi, concorrência nas chamadas

Em 8 de agosto de 2012 20:41, Luiz Americo Pereira Camara <luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
> Em 8 de agosto de 2012 12:11, Paulo Botelho <ppbflu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
>>
>> Olá Pessoal,
>>
>> Sou novo no grupo e estou fazendo uns testes com o FastCgi, (fpWeb,
>> fpFCGI) e consegui fazer os testes iniciais.
>>
>> O que não consegui (e é fundamental para mim) é fazer com que aceite
>> chamadas simultâneas/concorrentes.
>>
>> Em um simples teste, tenho duas actions. a action1 faz um sleep(n) e em
>> seguida faz a resposta normal.
>> A action2 simplesmente responde um texto qualquer.
>>
>> Se chamar action1 e action2 simultaneamente, action2 só responde depois
>> que action1 terminar o sleep e responder.
>>
>> Alguém tem alguma sugestão de como utilizar o FastCgi em um ambiente de
>> concorrência ?
>
>
> Qual o servidor você está usando?
>
> Pelo menos o apache não suporta Multiplexing:
> http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
>
> Acho que o fpweb também não
>
> Com relação a concorrência, o fastcgi permite executar mais de uma instância
> por vez (configurável).
>
> Luiz

Luiz, deixa eu te contar uma coisa legal que aprendi sobre FCGI no Apache (experiência no Mint, Apache crú, usando config default), vai ser legal pro Paulo acompanhar... Estou enviando em anexo o teste super bobo que fiz usando custfcgi. (me falaram no BT que ela é multi thread)

Quando um usuário faz uma requisição comum, que seja razoavelmente rápida, o Apache abre uma única instância do executável fcgi. Se o mesmo usuário e/ou outros usuários fizeram novas requisições, o Apache continua aproveitando a mesma instância do fcgi. E ele vai levando a vida, aproveitando a mesma instância, até todo mundo descansar de requisições e o timeout do fcgi ser disparado, aí enfim a instância desaparece. Eu gostei muito disso, e é nessa parte que o FastCGI ganha em performance para o PHP.

O cenário muda na seguinte situação: o primeiro usuário faz uma requisição, que irá entrar em loop ou ficar presa num sleep por alguns segundos. Supondo que o PID da instância seja 8306; Um novo usuário faz uma requisição quase que no mesmo instante do primeiro usuário, para esse segundo o PID é 8307. O primeiro, ainda preso no loop, fica observando o botão de refresh do browser rodando, avisando que está em processamento... O segundo usuário faz uma nova requisição, e vamos que o PID dele continua sendo o 8307. Já o segundo, vai trocando de instância, dividindo o tempo em cada uma delas para escapar do timeout. Eu notei que para o primeiro request fugir de ser encerrado pelo timeout, o Apache continua abrindo novas instâncias para ele, mas elas não passam de dez. Os caras do Apache foram muito espertos em criar algo assim. Resumindo em miúdos, para o Apache em Linux Mint (juro que irei testar no openSUSE e no meu server online na HostMonster), o Apache mantém uma única instância para requests razoavelmente rápidos, e uma série de 10 instâncias para requests pesados. Isso deve ser correto, uma vez que quem usa FastCGI são os caras mais exigentes do mundo no quesito performance: o povo do C++.

Teste bobo, se puder, faça no teu server e nos conta como foi tua experiência (eu não tenho pressa, fique a vontade):

------------------------------------------
program project1;

{$mode objfpc}{$H+}

uses
  custweb,
  custfcgi,
  HTTPDefs,
  SysUtils;

type
  TApp = class(TCustomFCGIApplication)
  protected
    function InitializeWebHandler: TWebHandler; override;
  end;

  TWHandler = class(TFCGIHandler)
  public
    procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
  end;

  function TApp.InitializeWebHandler: TWebHandler;
  begin
    Result := TWHandler.Create(Self);
  end;

  procedure TWHandler.HandleRequest(ARequest: TRequest; AResponse: TResponse);
  begin
    case ARequest.PathInfo of
      '/timer': Sleep(60000);
      '/test': AResponse.Content := FormatDateTime('hh:nn:ss', Now);
    end;
  end;

begin
  with TApp.Create(nil) do
    try
      Run;
    finally
      Free;
    end;
end.
------------------------------------------

Para testar, chame /test. Usando ps e grep pegue o PID do primeiro request; Chame /timer, e fique observando a variação de PIDs dele, porém notando o PID do primeiro.

Testei se meu roteador estava OK quando a isso, cheguei a suar frio pois acreditei que quando o roteador estivesse ocupado com uma rota e ação em loop, ela só ia processar o pattern das próxima ações após a primeira sair do da primeira loop, tipo um funil. Caí o queixo, funcionou tudo perfeitamente, isso é certo pq usei um request independente para cada rota; cada rota tem uma ação em ponteiro, e cada ação tem um método request próprio. Gostaria de dar uma olhada nos fontes em PVT? Te enviei convites no Bitbucket mas como não respondeu pensei que não tinha interesse em acompanhar o nascimento do projeto. :/

Sorte nos testes. o/

--
Silvio Clécio
My public projects - github.com/silvioprog

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas



Em 8 de agosto de 2012 21:38, silvioprog <silvioprog-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
 Resumindo em miúdos, para o Apache em Linux Mint (juro que irei testar no openSUSE e no meu server online na HostMonster), o Apache mantém uma única instância para requests razoavelmente rápidos, e uma série de 10 instâncias para requests pesados.


Este é o comportamento esperado

Isto é definido pela opção -startDelay. Se um processo demora mais do que este tempo ele abre outro processo

OBS: estas opções são do plugin fastcgi e não do fcgid

Luiz

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR
Paulo Botelho | 15 Aug 2012 03:08
Picon

Re: [lazarus-br] FastCgi, concorrência nas chamadas - RESOLVIDO

BINGO... Resolvido, é configuração no apache conforme o Luiz informou. Segue abaixo o que pude observar nos testes preliminares :


httpd.conf - Configuração anterior :
##Eu tinha que estartar manualmente o meu cgi (project1.exe), e só conseguia reposta de uma requisição por vez :
<IfModule mod_fastcgi.c>
 AddHandler fastcgi-script .fcgi
 ScriptAlias /myfcgi "cgi-bin/no_matter_whats_here.fcgi"
 FastCgiExternalServer "cgi-bin/no_matter_whats_here.fcgi" -host 127.0.0.1:2015 -idle-timeout 30 -flush
</IfModule>

httpd.conf - NOVA Configuração :
#Neste modelo, ao estartar o apache, as qtd de instâncias definidas em -proccesses são imediatamente  instânciadas. (abro o taskManager e vejo 5 project1.exe estartados), e consequentemente consigo respostas simultaneas no browser.
<IfModule mod_fastcgi.c>
  FastCgiServer "cgi-bin\project1.exe" -idle-timeout 60 -processes 5   
</IfModule>

Obrigado a todos que ajudaram e agora posso prosseguir nos testes.

Abraços a todos.

Paulo Botelho


Em 14 de agosto de 2012 07:43, silvioprog <silvioprog-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
Em 14 de agosto de 2012 07:38, Luiz Americo Pereira Camara
<luizamericop-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
>
> Em 14 de agosto de 2012 07:34, silvioprog <silvioprog-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escreveu:
>>
>> Galera, ontem (finalmente) acessei o PC dele e vi o problema. Não é o
>> fpWeb, nem a FCL-Web... É que ele roda uma instância do CGI
>> manualmente, aí realmente complica. Falei com ele que a instância do
>> fcgi é feita automaticamente pelo Apache, então acredito que ele terá
>> que fazer alguma configuração no Apache.
>
>
> Se ele estiver usando o mod_fastcgi a opção é FastCgiExternalServer:
> http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
>
> Luiz

Hum... acho que ele vai responder aqui mais tarde, estou sem o Apache
aqui no momento e não sei pq, só em meu PC não consegui montar um
ambiente fcgi no Windows.

Paulo, mostra o teu httpd.conf para o Luiz, e a DLL que vc está
usando, acho que dá pra resolver por aqui mesmo (eu ia consular a
lista oficial do Apache com a ajuda do Luciano).

--
Silvio Clécio
My public projects - github.com/silvioprog

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

--
Você recebeu esta mensagem porque está inscrito no Grupo "Lazarus-BR"
nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
lazarus-br-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para cancelar a sua inscrição neste grupo, envie um e-mail para
lazarus-br+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/lazarus-br?hl=pt-BR

Gmane