Fórum Retorno JSON usando multithreads #586016
19/09/2017
0
Olá,
gostaria de trocar uma ideia aproveitando o gancho threads, sempre tive uma dúvida que mesmo pesquisando e através deste artigo esclareceu um pouco mais, mas ainda não é o suficiente para sanar.
Tenho a seguinte situação: digamos que eu tenha um webservice onde possua uma classe que herda da TTHREADS e esta classe deve realizar um consulta em uma tabela determinada e retornar um objeto JSON para ser recebido por uma aplicação externa que a chamou.
Este web service poderá ser consumido por mais de uma aplicação simultaneamente, ou seja, terá conexões concorrentes com o mesmo banco e tabela simultaneamente e isso com multithreads.
O que até hoje não consegui ter certeza é qual é a melhor forma de fazer este retorno JSON para cada instância de thread. Além disso, e se o resultado for entregue para a thread errada ou deixar alguma thread sem resultado?
A melhor forma seria um atributo público da thread do tipo JSON e antes de liberar da memória eu deveria retornar este.
A grosso modo digamos assim como no exemplo abaixo:
O que realmente não consigo ver de forma tão clara é, por exemplo, como ter certeza que a chamada "A" do web service que instanciou a thread "1" receberá o resultado da thread "1" e não será atribuído o resultado de uma thread "1" para a chamada "B", e vice-versa, quando existirem conexões simultâneas e threads concorrentes consequentemente?
Obrigado desde já pela ajuda.
Essa dúvida foi gerada a partir de um comentário no artigo Delphi Threads: Utilizando Threads em Delphi
gostaria de trocar uma ideia aproveitando o gancho threads, sempre tive uma dúvida que mesmo pesquisando e através deste artigo esclareceu um pouco mais, mas ainda não é o suficiente para sanar.
Tenho a seguinte situação: digamos que eu tenha um webservice onde possua uma classe que herda da TTHREADS e esta classe deve realizar um consulta em uma tabela determinada e retornar um objeto JSON para ser recebido por uma aplicação externa que a chamou.
Este web service poderá ser consumido por mais de uma aplicação simultaneamente, ou seja, terá conexões concorrentes com o mesmo banco e tabela simultaneamente e isso com multithreads.
O que até hoje não consegui ter certeza é qual é a melhor forma de fazer este retorno JSON para cada instância de thread. Além disso, e se o resultado for entregue para a thread errada ou deixar alguma thread sem resultado?
A melhor forma seria um atributo público da thread do tipo JSON e antes de liberar da memória eu deveria retornar este.
A grosso modo digamos assim como no exemplo abaixo:
TMinhaThread = class(TThread)
private
procedure ThreadOnTerminate(sender : TObject);
protected
procedure Execute; override;
public
FResultado: JSON;
constructor Create; reintroduce;
end;
procedure TMinhaThread.ThreadOnTerminate(sender : TObject);
begin
TMinhaThread(sender).resultado := //atribui registros serializados no formato json
end;
procedure TMinhaThread.Execute;
var
//componentesconexao
begin
//realiza conexão
.
.
end;
EVENTO NO WEB SERVICE ONDE INSTANCIOU A(S) THREAD(S)
var
NovaThread: TMinhaThread;
Begin
NovaThread := TMinhaThread.Create(True);
NovaThread.FreeOnTerminate := True;
try
NovaThread.OnTerminate := ThreadOnTerminate;
NovaThread.Resume;
//ResultadoWebService tipo json
ResultadoWebService := NovaThread.resultado;
except on EConvertError do
begin
NovaThread.Free;
ShowMessage('Não é um número válido!');
end;
end;
end;O que realmente não consigo ver de forma tão clara é, por exemplo, como ter certeza que a chamada "A" do web service que instanciou a thread "1" receberá o resultado da thread "1" e não será atribuído o resultado de uma thread "1" para a chamada "B", e vice-versa, quando existirem conexões simultâneas e threads concorrentes consequentemente?
Obrigado desde já pela ajuda.
Essa dúvida foi gerada a partir de um comentário no artigo Delphi Threads: Utilizando Threads em Delphi
Domper Ltda
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)