ネットワークの人気により、サーバープログラムが広く使用されています。
一部の人々は、サーバーを設計したい場合は、実際にVCを使用して、この人が言ったことは理にかなっていると言います。 、Delphiが持ち込んだ大きなものを使用しないでください(Delphiコントロールを使用しない方が良いです)。以下にお話しします。このようにして、APIを使用してサーバーを設計しますが、これはVCSとそれほど違いはありません。
Delphiを使用して、ユーザー接続の数に依存するフォームメッセージモードか完全なポートモードを使用するかどうかです。ユーザーの接続が1,000未満で、処理されたデータの量が大きくない場合は、フォームのメッセージモードを使用して1,000を超える場合は、完了ポートを使用して開発するのが最善です。サーバ。ユーザーの数が同時に変更されないことを確認することはできないため、誰もが完全なポートモードを使用するのが最善であることをお勧めします。 、後でメンテナンスを減らすことができます。
ここで、Delphiサーバーを開発するときに注意するために必要なものを紹介します。
1プログラムで文字列変数を使用しないでください
これは、実際の開発プロセス中にも発見されましたそれをチェックした後、私は情報を検索するためにオンラインで行きました。
2 XOR暗号化や暗号化などの高速暗号化アルゴリズムを使用する
サーバーはクライアントに渡すときに暗号化する必要がありますが、どのタイプの暗号化アルゴリズムを使用する必要がありますか? RSAやその他のアルゴリズムなど、多くの操作が必要なアルゴリズムを使用しないでください。 。 RSAを使用してCiphertextsを暗号化することもできますが、これによりサーバーがゆっくりと処理され、多くの処理が発生した場合、サーバーがサーバーを簡単に拒否できます。
3元のADO関数を使用してデータベースに接続します
サーバープログラムは通常、Delphi開発を使用する場合、ADOコントロールを使用するために使用されますが、ADOマニュアルを調査すると、サーバーは実際にデータ操作を完了する必要がないことがわかります。対応するADO関数を使用して直接実行できます。主に、サーバープログラムとデータベースは通常、比較的単純な操作であり、それほど複雑ではないためです。したがって、元のADOモードを使用してください。これにより、ADOコントロールによって引き起こされる問題も軽減されます。
4。もっと「プール」を使用する
サーバーの設計プロセスでは、多くの変数をサポートする必要があります。プーリングの概念を使用しないでください。そして、それは問題になる傾向があります。設計プロセス中に変数を作成およびリリースしないようにしてください。これにより、プログラムの実行速度を高速化し、競合を減らすことができます。プールテクノロジーの使用方法
ポインターの使用に5つの熟練しています
Pointer操作に精通していない場合、Pointerの概念を本当に理解したい場合は、ほとんど設計できません。
以下は、RECVを使用してバッファーを受け取る場合は、次の方法を実行できます。
var
A、B:バイトの配列[1..8]。
I:整数;
resultbuffer:byteの配列[1..max];
始める
i:= 1 to sizeof(buffer)div 8 do
始める
移動(バッファー[(i-1)*8+1]、a、8);
des(a、b、true);
移動(b、resultBuffer [(i-1)*8+1]、8);
終わり;
終わり
上記のコードを見てみましょう。アイデアは非常に明確です。これは、DES Decryptionアルゴリズムを使用してBに復号化し、結果バッファに戻すことです。
あなたがポインターに習熟している場合、あなたの効率は大幅に改善されます
var
A、B:pbyte;
I:整数;
resultbuffer:byteの配列[1..max];
始める
i:= 1 to sizeof(buffer)div 8 do
始める
a:= @buffer [(i-1)*8+1];
b:= @resultbuffer [(i-1)*8+1]
des(a^、b^、true);
終わり;
終わり
上記のコードを見てみましょう。
6 WSASEND、WSARECV、およびその他のWinSocket 2機能を使用する頻繁に、send、recv関数を使用しないでください
これは主に、サーバーが実行されているシステムに依存します。これは、Microsoftが結局それらを最適化したため、WSAシステムの機能を使用することをお勧めします。
7.スレッドプール操作を合理的に使用します
効率的なサーバーは、スレッドを使用することが合理的であり、スレッドが処理するためにどのようなデータが必要かを使用する必要があります。個人的には、スレッドプーリングテクノロジーを使用したい場合は、データベースクエリ操作など、最も時間のかかる操作に対処する必要があると思います。
8サーバーが「プール」の概念を使用する場合、プールを効率的に割り当てる方法がありますか?
スレッドプール、データプールなど、さまざまな方法でプールを使用しています。データが到着したとき、プールを割り当てる方法は?ここではお話ししません。将来、プールに関する特別な記事を書きます。プールの使用方法の詳細な説明。あなた自身もそれについて考えることができます。
9効率的な文字列操作関数を使用します
サーバーは多数の文字列を実行する必要があるため、Delphiが提供する機能を使用して動作する場合は、時間がかかります。あなたに助けてください。
10 SQLクエリステートメントを最適化します
一方では、SQLクエリステートメントを最適化して運用効率を向上させることができます。一方では、ストアドプロシージャを使用して運用効率を向上させることもできます。 (この知識のためにデータベースのコンテンツを見る必要がありますが、ここで最適化する方法については説明しません。)
上記の紹介は私の実践的な経験であり、誰もが助けることができることを願っています。より良いアプローチがある場合、それも議論することができます。