자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey Connection Closed Gracefully
2016.07.27 11:09
여러대의 장치에서 동시에 조회버튼을 클릭할 경우
몇몇 단말기는 정상조회가 되지만 몇몇 단말기는
'Connection Closed Gracefully.' 라는 메세지가 뜨면서 조회가 되지 않습니다
각각 단말기에서 개별적으로 조회를 하면 조회가 잘 됩니다
조회를 할 때 거의 동시에 누르거나 약간의 시간차를 두고 조회를 했을 때
먼저누른 쪽에서 Connection Closed Gracefully라는 오류 메세지가 뜹니다
뒤에 눌러진 쪽은 정상적으로 조회가 됩니다
Connection 설정은 아래와 같습니다(아래쪽이 Firemonkey)
TDSProviderConnection을 생성하기 전에 항상 connection을 확인하도록 해 놓았습니다
[Firemonkey - App]
var
DSPC : TDSProviderConnection;
CDS : TClientDataSet;
begin
if not MiddleConnection.Connected then
begin
MiddleConnection.Connected := True;
end;
DSPC := TDSProviderConnection.Create(Nil);
DSPC.SQLConnection := MiddleConnection;
DSPC.ServerClassName := 'TServerMethods1';
DSPC.Connected := True;
try
CDS := TClientDataSet.Create(Nil);
CDS.RemoteServer := DSPC;
CDS.ProviderName := 'dsList';
CDS.Active := True;
CDS.First;
...
except on e: Exception do
begin
CDS.Close;
ShowMessage(e.Message);
end;
end;
CDS.Close;
MiddleConnection.Connected := False;
FreeAndNil(DSPC);
FreeAndNil(CDS);
[Delphi XE - Middleware]
var
SqlQuery: TSQLQuery;
DSP: TDataSetProvider;
begin
SqlQuery := TSQLQuery.Create(Self);
SqlQuery.SQLConnection := SQLConnection1;
SqlQuery.SQL.Text := ' select * '+
' from operator ';
SqlQuery.ParamCheck := True;
DSP := TDataSetProvider.Create(Self);
DSP.DataSet := SqlQuery;
DSP.Name := 'dsList';
DSP.Constraints := True;
이 문제에 대한 정보나 해결방법이 있으면 도움 부탁드리겠습니다
감사합니다
댓글 4
-
험프리
2016.08.01 17:54
-
박군80
2016.08.02 10:01
답변 감사합니다 ^^
접속은 모든 디바이스가 다 됩니다
개별적으로는 조회버튼을 눌러도 문제 없이 조회가 잘 되는데
문제는 조회버튼을 동시에 눌렀을 때 몇몇의 디바이스가 저 메세지를 띄우면서 조회가 안되는 부분입니다
다른 쿼리를 동시에 조회할 때는 문제가 없는거 같은데 같은 쿼리(DataSetProvider)를 동시에 호출하면 저 메세지를 띄우는 것 같습니다
-
얄리
2016.08.02 11:00
개별적으로 조회가 잘 된다면 소스는 아무 문제가 없는 것이고 DBMS의 문제일겁니다.
DBMS의 동시접속자 수를 확인해보시거나 DB서버나 네트웍의 부하를 확인해보시기 바랍니다.
-
박군80
2016.08.03 09:23
답변주셔서 감사합니다 ^^
OS는 Windows7에 MySQL 5.7.10 버전을 사용중이고
DBMS확인 결과 동시 접속자는 151명으로 되어 있습니다
단말기는 4대로 테스트 중이며 서버쪽 네트웍은 광랜이라 속도문제는 없을 것으로 예상이됩니다
조회를 해보면 거의 동시에 누르거나 약간의 시간차를 두고 조회를 했을 때
먼저누른 쪽에서 Connection Closed Gracefully라는 오류 메세지가 뜹니다
뒤에 눌러진 쪽은 정상적으로 조회가 됩니다
Firemonkey Connection Closed Gracefully
2016.07.27 11:09
여러대의 장치에서 동시에 조회버튼을 클릭할 경우
몇몇 단말기는 정상조회가 되지만 몇몇 단말기는
'Connection Closed Gracefully.' 라는 메세지가 뜨면서 조회가 되지 않습니다
각각 단말기에서 개별적으로 조회를 하면 조회가 잘 됩니다
조회를 할 때 거의 동시에 누르거나 약간의 시간차를 두고 조회를 했을 때
먼저누른 쪽에서 Connection Closed Gracefully라는 오류 메세지가 뜹니다
뒤에 눌러진 쪽은 정상적으로 조회가 됩니다
Connection 설정은 아래와 같습니다(아래쪽이 Firemonkey)
TDSProviderConnection을 생성하기 전에 항상 connection을 확인하도록 해 놓았습니다
[Firemonkey - App]
var
DSPC : TDSProviderConnection;
CDS : TClientDataSet;
begin
if not MiddleConnection.Connected then
begin
MiddleConnection.Connected := True;
end;
DSPC := TDSProviderConnection.Create(Nil);
DSPC.SQLConnection := MiddleConnection;
DSPC.ServerClassName := 'TServerMethods1';
DSPC.Connected := True;
try
CDS := TClientDataSet.Create(Nil);
CDS.RemoteServer := DSPC;
CDS.ProviderName := 'dsList';
CDS.Active := True;
CDS.First;
...
except on e: Exception do
begin
CDS.Close;
ShowMessage(e.Message);
end;
end;
CDS.Close;
MiddleConnection.Connected := False;
FreeAndNil(DSPC);
FreeAndNil(CDS);
[Delphi XE - Middleware]
var
SqlQuery: TSQLQuery;
DSP: TDataSetProvider;
begin
SqlQuery := TSQLQuery.Create(Self);
SqlQuery.SQLConnection := SQLConnection1;
SqlQuery.SQL.Text := ' select * '+
' from operator ';
SqlQuery.ParamCheck := True;
DSP := TDataSetProvider.Create(Self);
DSP.DataSet := SqlQuery;
DSP.Name := 'dsList';
DSP.Constraints := True;
이 문제에 대한 정보나 해결방법이 있으면 도움 부탁드리겠습니다
감사합니다
댓글 4
-
험프리
2016.08.01 17:54
-
박군80
2016.08.02 10:01
답변 감사합니다 ^^
접속은 모든 디바이스가 다 됩니다
개별적으로는 조회버튼을 눌러도 문제 없이 조회가 잘 되는데
문제는 조회버튼을 동시에 눌렀을 때 몇몇의 디바이스가 저 메세지를 띄우면서 조회가 안되는 부분입니다
다른 쿼리를 동시에 조회할 때는 문제가 없는거 같은데 같은 쿼리(DataSetProvider)를 동시에 호출하면 저 메세지를 띄우는 것 같습니다
-
얄리
2016.08.02 11:00
개별적으로 조회가 잘 된다면 소스는 아무 문제가 없는 것이고 DBMS의 문제일겁니다.
DBMS의 동시접속자 수를 확인해보시거나 DB서버나 네트웍의 부하를 확인해보시기 바랍니다.
-
박군80
2016.08.03 09:23
답변주셔서 감사합니다 ^^
OS는 Windows7에 MySQL 5.7.10 버전을 사용중이고
DBMS확인 결과 동시 접속자는 151명으로 되어 있습니다
단말기는 4대로 테스트 중이며 서버쪽 네트웍은 광랜이라 속도문제는 없을 것으로 예상이됩니다
조회를 해보면 거의 동시에 누르거나 약간의 시간차를 두고 조회를 했을 때
먼저누른 쪽에서 Connection Closed Gracefully라는 오류 메세지가 뜹니다
뒤에 눌러진 쪽은 정상적으로 조회가 됩니다
구현한 부분에서는 잘못된 부분은 없으신 것 같습니다.
의심가는 부분은 환경적인 문제입니다.
몇대의 디바이스는 접속이되고,
몇대의 디바이스는 접속되지 않는다면
몇대의 접속되지 않는 디바이스가 서버로 접속할 수 있는 환경인지 확인해 보시기 바랍니다.
(TSQLConnection.Driver.Hostname이 보이지 않아 어떤 환경인지 확인할 수 없네요^^)
예를 들어
미들웨어(데이터스냅 서버)를 NAT 영역(공유기 내)에서 실행했다면,
같은 공유기(WIFI)로 접속한 디바이스는 접속이 잘될 것이고,
3G, LTE 등으로 접속을 시도하면 접속이 되지 않고 'Connection Closed Gracefully.' 오류가 발생할 것 입니다.
환경을 먼저 검토해 보시기 바랍니다.