centos7でstart-stop-daemonが使いたいなと思い、
調べていると、epelレポジトリにdpkgというパッケージがあった。
https://apps.fedoraproject.org/packages/dpkg/
ってわけで、
# yum install dpkg --enablerepo=epel
で、start-stop-daemonコマンド入りのdpkgがインストール可能である。
ソースからビルドする必要あると思っていたのに。。
以上
IT系のめもを蓄積していこうかと
centos7でstart-stop-daemonが使いたいなと思い、
調べていると、epelレポジトリにdpkgというパッケージがあった。
https://apps.fedoraproject.org/packages/dpkg/
ってわけで、
# yum install dpkg --enablerepo=epel
で、start-stop-daemonコマンド入りのdpkgがインストール可能である。
ソースからビルドする必要あると思っていたのに。。
以上
Google Computer Cloud(以下、GCP)で、
グローバルロードバランサの背後にnginxを置く場合は、
keepaliveをしておこう。
(参考)
https://blog.percy.io/tuning-nginx-behind-google-cloud-platform-http-s-load-balancer-305982ddb340
これやっておかないと、結構502がでる。
ちなみに、650秒をkeepalive_timeoutにするなら、
ロードバランサのタイムアウトは600秒程度、つまり少し短めがよいとのこと。
実は、AWSのELBも同様。
とはいえ、結構な高負荷にならないと、本事象は目立ってこないので、
なかなか難しいところである。
以上
std::unorderd_mapになんでも入れてみた。
とりあえずコード。
class Session { private: std::unordered_map<std::string, std::shared_ptr<void>> values; public: template <typename T> bool getValue(const std::string &name, T *value) { std::shared_ptr<void> data = values[name]; if (data != nullptr) { void* raw = data.get(); *value = *((T*) raw); return true; } return false; } template <typename T> void setValue(const std::string &name, T *value) { values.emplace(std::make_pair(name, std::make_shared<T>(*value))); } }; struct STest { int m1; std::string m2; }; int main() { STest t1{2, "hoge"}; Session s; s.setValue<STest>("key", &t1); STest t2; if (s.getValue<STest>("key", &t2)) { std::cout << "m1:" << t2.m1 << ", m2:" << t2.m2 << std::endl; // 2, hoge } }
となる。
コンテナから引き出す時に、無駄に1回生成が走るから、
大きいインスタンスでは注意が必要。
で、なぜこれをつくるかというと、
例えばTCPの常時接続の際、
セッションで引き回せると、
簡単に値を保持できるという狙いのため。
とはいえ、ポインタのキャスト多いから、大丈夫かはわからん。。
確実な使い方しないと危なそう。。
以上