
私はLinuxサービスを作成し、それと通信できるようにしたいです。データを追加してインポートできるデータベースのようなものです。サービスをサーバーにせずにサービスと通信する方法はありますか?私の言葉は、データを送受信するためにhttp
方法を使用しないことを意味します。https
私が望むのは、URL
番号を使用せずにサービスに接続する方法ですport
。
答え1
あなたが探している答えは、次のものを使用することですシステムソケット
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
orを使いますnetcat
:
$ nc 127.0.0.1 11111
私は単に標準入力を標準出力に渡すためにExecStart
使用することにしました。cat -
を実行すると、nc
stdinに入力したすべての内容がstdoutに再エコーされることを確認できます。実行したいより興味深いアプリケーションがあるかもしれません。
他の素晴らしい点:
cat
開いているソケットがない場合(ソケットは受信中ですがサービスは停止します)、実行されません。- 接続を確立するとサービスが開始されます。
- 別の接続が行われると、サービスの別のインスタンスが開始されます。
- 接続を閉じるとサービスが停止します。
答え2
何かが接続を受信するたびにサーバーがあります。 HTTP/S は多くのプロトコルの 1 つにすぎません。独自のプロトコルを介してリモートデータベースに接続することもできます。より複雑なソリューションを探している場合は、SSHトンネリング - 順方向と逆方向をお読みください。systemd
決して解決策の必須要素ではありません。
答え3
ローカルコンピュータからのみアクセスして簡単なスクリプトを作成したい場合は、fifoを使用してください。ネットワーク上の他のシステムがアクセスできるようにするには、netcat(nc
)を確認してください。
Pythonの専門家にはFlaskがあり、PerlプログラマーにはDancer2があります。
socket
Cでは、bind
およびを使用できますlisten
。
@tomが言ったように、systemd
あなたの要件とは関係ありません。
編集する:
あなたの追加
私が望むのは、URLやポート番号ではなくサービスにアクセスする方法です。
あなたが探しているものが何であるかは完全に不明です。
コンピュータと通信するには、アドレスを知る必要があります。そうでなければ、誰と通信しているのかは決してわかりません。データベースとクライアントも合意された契約を結ぶ必要があります。さもなければ、彼らはお互いを理解していないでしょう。これを行うにはURIが必要です。
ポート番号(TCPやUDPなど)を使用したくない場合は、他のプロトコル(https://www.iana.org/locationments/protocol-numbers/protocol-numbers.xhtml)、それがあなたに効果がある場合。それなら253か254が適当だと思う。しかし、これをうまくいくふりをすることを受け入れないでください。まだこれを作動させる能力がないようです。
提案がある場合は、まず同じシステムでfifoを試してください。うまくいけば、netcatで調べてみてください。