如何在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 中进行调查。

相关内容