我想创建一个 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 中进行调查。