クエリを処理できるサービスを Linux で作成するにはどうすればよいですか?

クエリを処理できるサービスを Linux で作成するにはどうすればよいですか?

Linux サービスを作成して、そのサービスと通信できるようにしたいと考えています。データを追加したり取得したりできるデータベースのようなもの。サービスをサーバーにせずにサービスと通信する方法はありますか? つまり、データの送受信にhttpやメソッドを使用しないということです。必要なのは、番号httpsを使用せずにサービスに接続する方法です。URLport

答え1

あなたが探している答えは、systemd.ソケット

stdin を読み取り、stdout に書き込むプログラムがあるとします。systemd を設定して、ソケット経由でアクセスできるようにすることができます。

これを実行するための systemd の設定例を次に示します。

# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111

# /etc/systemd/system/[email protected]
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket

[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket

次に、次のコマンドでソケットを起動します。

$ sudo systemctl start simple.socket

これで、ソケットを確立してサービスを実行できます。これにはncまたは を使用しますnetcat

$ nc 127.0.0.1 11111

では、 stdin を stdout に単純に中継する をExecStart使用することを選択しますcat -。 を実行するとnc、stdin に入力したものはすべて stdout 経由でエコーバックされることがわかります。おそらく、実行したいもっと興味深いアプリケーションがあるでしょう。

その他の素晴らしい点:

  • cat開いているソケットがない場合 (ソケットはリッスンしているが、サービスは停止している) は実行されません。
  • 接続を確立すると、サービスが開始されます
  • 別の接続を確立すると、サービスの別のインスタンスが起動します。
  • 接続を閉じるとサービスは停止します。

答え2

何かが接続を受信するときはいつでも、サーバーが存在します。HTTP/S は、数多くのプロトコルの 1 つにすぎません。独自のプロトコルを使用してリモート データベースに接続することもできます。より複雑なソリューションをお探しの場合は、SSH トンネリング - フォワードおよびリバースについてお読みください。これは、systemdソリューションに必須の要素ではありません。

答え3

ローカル マシンでのみこれにアクセスし、簡単なスクリプトを作成する場合は、fifo を使用します。ネットワーク上の他のシステムにもアクセスできるようにする場合は、netcat ( nc) を参照してください。

Python の熟練者には Flask があり、Perl プログラマーには Dancer2 があります。

C では、、およびを使用しますsocketbindlisten

そして、@tom が述べたように、systemdこれはあなたが求めていることとは何の関係もありません。

編集:

あなたの追加

私が欲しいのは、URL とポート番号以外でサービスに接続する方法です。

何を探しているのか全く不明瞭になります。

コンピュータと通信したい場合は、そのアドレスを知っておく必要があります。そうしないと、誰と通信しているのかわかりません。データベースとクライアントにも合意したプロトコルが必要です。そうしないと、お互いを理解できません。そのため、URI が必要になります。

TCPやUDPのようにポート番号を使用したくない場合は、別のプロトコル(https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) が適しているなら、253 または 254 が適しています。ただし、これを見下したように受け取らないでください。これを機能させるスキルがまだないようです。

推奨事項に従う場合は、まず同じシステムで FIFO の使用を試みてください。それが機能する場合は、netcat で調査してください。

関連情報