Linux上のC++で書かれたサーバークライアントアプリケーションがあります。クライアントが自分のサーバーに接続すると、サーバーはクライアントが実行するサーバーコマンドを送信するのを待つスレッドを生成します。コマンドはOSに依存します。クライアントがサーバと通信しているスレッドは、クライアントが要求する必要なコマンドを実行するグローバル関数を呼び出します。だから私は、クライアントが実行するサーバーに送信するコマンドに依存するすべての2つの機能を持っている必要があります。これらのグローバル関数はすべて、メインスレッド関数と同じヘッダに定義されています。これは、異なるOSのために、これらすべての機能を少しばかり乱雑にしています。私の考えは、WindowsFuncsとLinuxFuncsと呼ばれる2つのクラスを記述することです。このクラスは、そのクラスが設計されたOSに対して必要なコマンドを実行する静的メンバ関数を持っています。私のロジックをきれいにする方法に関するstackoverflowsのアイデアは何ですか?サーバークライアントアプリケーションで、サーバー側でクライアントデータを処理するためのきれいな方法を考えています
0
A
答えて
0
これはスレッドの問題のようには聞こえません。 単純な継承を使用できるように思えます。その後、サーバー、クライアントの処理コードが
void accept(Socket s, OSMethods m) {
s.readCommand();
m.listDir(); // or whatever
}
ような方法は、Linuxまたは勝利クラスのいずれかの受け入れを正しいインスタンスを渡していることを確認してい
abstract class OSMethods {
void listDir();
}
class OSMethodsLinux : OSMethods {
void listDir() { system.exec("ls"); }
}
class OSMethodsWin : OSMethods {
void listDir() { system.exec("dir"); }
}
のようなものを使用して
。 静的メソッドはありません。
一般的に私は、あなたが巧妙なものをやっていない限り、あなたのプログラムに静的メソッドが必要ないことを知りました。ほとんどのものはそれを必要とせず、柔軟性に欠ける設計になります。
関連する問題
- 1. Socket.close()は接続を終了するためのきれいな方法と考えられていますか?
- 2. サーバー側でJSONを処理する
- 3. 並べ替えのためのサーバー側処理を無効にする
- 4. Datatableサーバー側の処理で並べ替えアイコンが変更されない
- 5. Kafka処理できないメッセージを消費する - 後で壊れたメッセージを再処理する方法?
- 6. 引数処理の大きなブロックを統合するためのきれいな方法は何ですか?
- 7. ウェブサイト、クライアント側またはサーバー側をかすめる方法は?
- 8. Reactサーバー側レンダリングでUnhandledPromiseRejectionWarningを処理できません
- 9. 処理された(処理されていない)Javascriptエラーをサーバーに送信
- 10. レイアウト処理サーバー側ですか?
- 11. 私は、クライアント側でサーバー通信にWebソケットを使用したいと考えています。
- 12. Google Apps ScriptでDatatablesのサーバー側処理を使用する方法
- 13. ForkJoinPoolでキャッチされていない例外を処理するためのより良い方法タスク/アクション
- 14. DataTableサーバー側処理がSpring MVCで動作しない
- 15. 例えばKeyDown Routed Eventがすでに処理されていない場合の処理方法。 TextBox
- 16. DataTablesサーバー側でのリンクの処理
- 17. Yieldsでnullを処理するきれいな方法がありますか?
- 18. サーバー側でHttpUrlConnectionをどのように処理しますか?
- 19. JQueryデータブル・サーバー側の処理
- 20. エラーを処理する方法SOAPでの処理がC言語で行われていない#
- 21. HTML5 - クライアント側で処理しないでファイルをアップロードする
- 22. イメージのアップロードと処理、サーバー側またはクライアント側?
- 23. サーバーのスケーラビリティを処理する方法
- 24. Apache Flinkでめったに更新されない大きなルックアップテーブルを処理する方法
- 25. サーバー側のHTTP GET入力パラメータをPythonで処理する
- 26. ブラウザでサーバー側のAjax処理エラーをキャッチする
- 27. サーバー側でpluploadのチャンクアップロードを処理する
- 28. コンフルエントカフカで消費者側のメッセージ処理エラーを処理する方法は?
- 29. DataTablesサーバー側処理がハングする
- 30. Javaアノテーション処理 - すでに処理されたコードを処理する方法?
ランダム質問:これらの関数のすべてをスレッドが安全に呼び出すようにしたいので、これらのクラスメソッドのmutex変数はどこに置くのですか? – TheFuzz
OSMethodsXXXの1つのインスタンスの中に1つのミューテックスを置きます。これは、メソッドの開始時にOSMethodsXXXのすべてのメソッドが取得し、完了すると解放します。 OSMethodsXXXのインスタンスを1つだけ作成してください。 – DaveC
私はLinuxのボックスにビルドしているので、ビルドする前に、コメントを残しておく必要がないように、Windowsのコードをそこに残すことはできますか?ちょうどifdefs? – TheFuzz