UDP C/Sを作成しています。サーバーが1秒間に受信できるデータの数に問題があります。DelphiのUDPサーバーとクライアント
私は10,100,1000データメッセージのバッチをサーバーに送信し、10,100は問題なく受信したことをテストしました。 1000を送信すると、300〜400だけが受信されます。すべてのテストはローカルで行われました。
ICSのtwsocketとSynapseのtudpblocksocketの両方を使用してサーバーを実装しようとしました。どちらも上記の同じ問題で判明しました。
なぜこのようなことが起こっているのか、私はどのようにサーバーのパフォーマンスを改善できますか?
TUDPBlockSocket
...
while not Terminated do
begin
try
sz := FUDPServer.WaitingData;
if sz > 0 then
begin
FUDPServer.RecvBuffer(mem.Memory, sz);
mem.Seek(0, 0);
AMessage := fFormats.ReadFromStream(mem);
DoMessageReceived(FUDPServer.RemoteSin.sin_addr, AMessage);
end;
finally
end;
end;
を使用してコード...
ICSに
を使用してコード...
procedure TShapeServer.WSocketDataAvailable(Sender: TObject; ErrCode: Word);
...
begin
SrcLen := SizeOf(Src);
stream := TMemoryStream.Create;
stream.SetSize(INT_BUFFER_SIZE);
Inc(fMessageReceived);
try
Len := FUDPServer.ReceiveFrom(stream.Memory, stream.size, Src, SrcLen);
if (FSenderAddr.S_addr = INADDR_ANY) or
(FSenderAddr.S_addr = Src.Sin_addr.S_addr) then
begin
while stream.Position < Len do
begin
try
AMessage := fFormats.ReadFromStream(stream);
DoMessageReceived(Src.Sin_addr, AMessage);
except
break;
end;
end;
end;
finally
stream.Free;
end;
end;
...
wiresharkを使用してループバックudpトラフィックをログに記録できますか(Windowsではwinpcapで動作します)。 –
私はまた、マイクロソフトの「セキュリティ」のパケット/秒の制限について検討します。 IIRC、tcpip.sysがイベントログにキャッピングアクションを報告しました –
私はwiresharkを試しました。それが間違っているかどうかはわかりませんが、選択するループバックアダプタがあります。 :(素晴らしいツールtho。 – Darkerstar