
我想創建一個 Linux 服務並且能夠與其通訊。像是資料庫之類的東西,我可以添加和獲取資料。有什麼方法可以與我的服務進行通訊而不將服務設為伺服器嗎?我的意思是不要使用http
或https
方法來發送和獲取資料。我想要的是一種無需使用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
現在您可以透過建立套接字來運行該服務。我使用nc
ornetcat
為此:
$ 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
,bind
和listen
。
正如@tom 所說:systemd
與您的要求無關。
編輯:
您的補充
我想要的是一種除了 URL 和連接埠號碼之外連接到服務的方法。
讓人完全不清楚你在尋找什麼。
如果你想與電腦通信,你必須知道它的位址。否則,你永遠不會知道你在和誰溝通。您的資料庫和您的客戶還必須有一個商定的協議。否則他們不會互相理解。這樣,您就必然擁有一台 URI。
如果您不想使用連接埠號碼(如 TCP 或 UDP 那樣),您可以使用其他協定(https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)如果適合你的話。 253 或 254 就比較合適。但是,請不要將此視為居高臨下,您似乎還沒有能力使其發揮作用。
如果您願意接受建議,請先嘗試在同一系統上使用 fifo。如果有效,請在 netcat 中進行調查。