私はgsoapを使用してC++でsoapサーバーを作成しています。メッセージは、Javaで記述されたバスを介してルーティングされます。サーバーとバスの両方がマルチスレッド化されています。システムを介して一度に1つのメッセージを送信すると、すべてがうまく機能します。3つのクライアントを起動して、それぞれができるだけ速くメッセージを送信すると、約3500のメッセージですべてが正常になります。その後、定期的に「一度に1つのソケット接続のみが許可されます」という受信を開始します。gsoapコードからのエラー。通常、4000通のメッセージのうち約3950通がOKです。過去500回の送信で50回すべての障害が発生しました。
送信の開始時にではなく、多くの送信後にこれらのエラーが発生するのはなぜですか?送信率は上がりません。
それは何について話しているのですか?エラーの説明が見つからず、その意味がわかりません。
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
;
}