如何在Linux中建立一個可以處理查詢的服務?

如何在Linux中建立一個可以處理查詢的服務?

我想創建一個 Linux 服務並且能夠與其通訊。像是資料庫之類的東西,我可以添加和獲取資料。有什麼方法可以與我的服務進行通訊而不將服務設為伺服器嗎?我的意思是不要使用httphttps方法來發送和獲取資料。我想要的是一種無需使用URL和號碼即可連接到服務的方法port

答案1

我認為您正在尋找的答案是使用系統套接字

假設我有任何程式可以讀取標準輸入並寫入標準輸出。您可以配置 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

現在您可以透過建立套接字來運行該服務。我使用ncornetcat為此:

$ nc 127.0.0.1 11111

ExecStart選擇使用cat -它簡單地將標準輸入中繼到標準輸出。當我們運行時nc,我們會發現我們在 stdin 中輸入的任何內容都會透過 stdout 回顯給我們。您可能有一個更有趣的應用程式想要運行。

其他一些很酷的點:

  • cat如果您沒有開啟的套接字(套接字正在偵聽,但服務已停止),則不會運作。
  • 當您建立連線時,服務啟動
  • 如果建立另一個連接,則會啟動該服務的另一個實例。
  • 當您關閉連線時,服務就會停止。

答案2

每當有東西接收連線時,您就有一個伺服器。 HTTP/S 只是眾多協定中的一種。您也可以透過自己的協定連接到遠端資料庫。如果您正在尋找更複雜的解決方案,請閱讀 SSH 隧道 - 正向和反向。並且systemd絕不是您的解決方案中的必需元素。

答案3

如果您只想在本機上存取它,並且想要製作簡單的腳本,請使用 fifo。如果您希望網路上的其他系統也能夠訪問,請查看 netcat ( nc)。

對於 Python 專家來說,有 Flask,對於 Perl 程式設計師來說,有 Dancer2。

在 C 中,您可以使用socket,bindlisten

正如@tom 所說:systemd與您的要求無關。

編輯:

您的補充

我想要的是一種除了 URL 和連接埠號碼之外連接到服務的方法。

讓人完全不清楚你在尋找什麼。

如果你想與電腦通信,你必須知道它的位址。否則,你永遠不會知道你在和誰溝通。您的資料庫和您的客戶還必須有一個商定的協議。否則他們不會互相理解。這樣,您就必然擁有一台 URI。

如果您不想使用連接埠號碼(如 TCP 或 UDP 那樣),您可以使用其他協定(https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)如果適合你的話。 253 或 254 就比較合適。但是,請不要將此視為居高臨下,您似乎還沒有能力使其發揮作用。

如果您願意接受建議,請先嘗試在同一系統上使用 fifo。如果有效,請在 netcat 中進行調查。

相關內容