
Linux サービスを作成して、そのサービスと通信できるようにしたいと考えています。データを追加したり取得したりできるデータベースのようなもの。サービスをサーバーにせずにサービスと通信する方法はありますか? つまり、データの送受信にhttp
やメソッドを使用しないということです。必要なのは、番号https
を使用せずにサービスに接続する方法です。URL
port
答え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 では、、およびを使用しますsocket
。bind
listen
そして、@tom が述べたように、systemd
これはあなたが求めていることとは何の関係もありません。
編集:
あなたの追加
私が欲しいのは、URL とポート番号以外でサービスに接続する方法です。
何を探しているのか全く不明瞭になります。
コンピュータと通信したい場合は、そのアドレスを知っておく必要があります。そうしないと、誰と通信しているのかわかりません。データベースとクライアントにも合意したプロトコルが必要です。そうしないと、お互いを理解できません。そのため、URI が必要になります。
TCPやUDPのようにポート番号を使用したくない場合は、別のプロトコル(https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) が適しているなら、253 または 254 が適しています。ただし、これを見下したように受け取らないでください。これを機能させるスキルがまだないようです。
推奨事項に従う場合は、まず同じシステムで FIFO の使用を試みてください。それが機能する場合は、netcat で調査してください。