アーカイブ「2023年11月」

掲題のものを実装してみました。

https://github.com/shigenobu/PurpleSofa

もともと、クライアントは1接続前提で作っていたのですが、

TCPのプロキシサーバーを作りたいなーと思い、

ベースライブラリとして、上記ライブラリに複数クライアントを束ねる機能を作ってみました。

PurpleSofaの特徴の1つとして、TCPセッションの最終受信時刻からアイドルタイムを経過すると、

TCPセションを強制的に切断するようにしています。

これはハーフCLOSE対策のためです。

サーバ側は、複数のTCPセッションをまとめて管理していたいのですが、

今回クライアント側も同じ様な対応を施しました。

で、そもそもとしてはTCPプロキシサーバーを作りたいというところなのですが、

長年お世話になっていたHAPROXYが、2系でコンテナで動かすと異常にCPUを消費するということがあり、

公式のISSUEでもあがっているのですが、なかなか完全対応というわけにはいかなそうです。

1系は問題ないので、仕事では1系を使ってますが、、もう古いので。。

意外なほどに、HAPROXYのようなヘルスチェックを兼ねているプロキシサーバーというものは少なく、

K8Sとかの大規模向けだと、どうも取り回しが悪いので、小さいものを作れないかなーと思い立ったわけです。

サンプルを作りつつ、ある程度目処はたったものの、

ヘルスチェックも様々あるので、ヘルスチェック部分をプラグイン化できないかと検討中です。

ちなみに、サンプルのコードは以下のとおりです。

https://github.com/shigenobu/PurpleSofa/blob/master/PurpleSofa.SampleProxy/Program.cs

ちょっとわかりにくいのですが、

上手く溜め込んで、バックエンド・フロントエンドとやり取りする

というのがポイントでしょうか。

要はプロキシはTCP端点をフロントとバックの2つで担当することになるので、

フロントとバックが繋がっていない状態を考慮して、メッセージを溜め込んでおく必要があるということです。

やっている人が少ないのですが、golangでは公式ライブラリとしてあるようなので、

そういった実装も参考にさせていただきました。

.NET8もリリースされたので、そろそろTCPプロキシサーバーを着手していければと考えています。

以上

投稿日時:2023年11月28日 14:03   カテゴリー:c#   [コメントがあればどうぞ]

前回投稿から、しばらくたちましたが、

0.1.0から少しずつ機能追加・修正を繰り返し、

0.2.0をリリースしました。

https://github.com/shigenobu/ebonyrack/releases/tag/v0.2.0

(最新はこちら)https://github.com/shigenobu/ebonyrack/releases

前回書いていて、実装したかった分ですが、とりあえず以下の内容で対応しています。

むずい。ペンディング。

むずい。ペンディング。

こちらは、0.2.0でアウトライン機能を実装しました。

アウトラインの枠内を動かすことで、右側のワークスペースが一緒に動きます。

逆もまた同じです。

今まで、グラフィックスを取得すると、後続が描画されないということで諦めていたのですが、

    var rect = workspace.getBounds();
    var captureImage =
        new BufferedImage(rect.width, rect.height,
            BufferedImage.TYPE_INT_ARGB);
    var cg = captureImage.getGraphics();
    workspace.printComponents(cg);
    cg.dispose();

    var g2 = (Graphics2D) g.create();
    g2.drawImage(captureImage, 0, 0, w, h, new Color(73, 70, 44, 8), null);
    g2.dispose();

なんて感じで「printComponents」メソッドを使うことで上手く描画できました。

画像・DDLともに出力時に保存先を選択できるようにしました。

最後に出力した保存先は、次回保存するときにデフォルトで選択されるようになりました。

DDLについては、シーケンス・テーブル・外部キー、を選択して出力できるようにしました。

いつかやる。(かも)

だいぶできてきた感じはあるものの、

まだ対応しきれない細かい部分は結構ある感じです。

直近では、プロジェクトを開いたときに、

ワークスペースのスクロールバーの位置が調整できていないことがあるので、

それを直していければとは考えています。

ひとまず、当面はUI改善を進めつつ、パーティンションの機能を追加できればとは考えています。

以上

投稿日時:2023年11月28日 13:45   カテゴリー:java, mariadb, mysql   [コメントがあればどうぞ]