gsoap을 사용하여 C++에서 비누 서버를 만듭니다. 메시지는 Java로 작성된 버스를 통해 라우트됩니다. 서버와 버스 모두 멀티 스레드입니다. 모든 것이 시스템을 통해 한 번에 하나의 메시지를 보내는 것이 효과적입니다. 가능한 한 빨리 각 클라이언트가 3 개의 메시지를 보내는 경우 약 3500 개의 메시지가 정상적으로 처리됩니다. 그런 다음 주기적으로 "한 번에 하나의 소켓 연결 만 허용"을 받기 시작합니다. gsoap 코드의 오류. 일반적으로 약 4000 개의 메시지 중 약 3950 개가 OK입니다. 마지막 500 건의 전송에서 50 건의 오류가 발생했습니다.C++의 Gsoap 오류
왜 이러한 오류는 많은 송신 후에 발생하지만 송신의 시작 부분에서 발생하지 않습니까? 전송 속도는 증가하지 않습니다.
무슨 내용입니까? 오류에 대한 설명을 찾을 수 없으며 그 의미가 분명하지 않습니다.
누구나 성공적으로 gsoap 앱을 멀티 스레드 했습니까?
여기 내 서버 코드입니다.
long WINAPI threadGO(soap *x);
int main(int argc, char* argv[])
{
HANDLE thread1;
int m, s; /* master and slave sockets */
struct soap *soap = soap_new();
if (argc < 2)
soap_serve(soap); /* serve as CGI application */
else
{
m = soap_bind(soap, NULL, atoi(argv[1]), 100);
if (m < 0)
{
soap_print_fault(soap, stderr);
exit(-1);
}
fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
for (;;)
{
s = soap_accept(soap);
thread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadGO,soap_copy(soap),0,NULL);
}
}
soap_done(soap);
free(soap);
return 0;
}
long WINAPI threadGO(soap *x)
{
soap_serve(x);
soap_end(x);
return 0
;
}