나는 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는 많은 프로토콜 중 하나일 뿐입니다. 자체 프로토콜을 통해 원격 데이터베이스에 연결할 수도 있습니다. 보다 복잡한 솔루션을 찾고 있다면 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에서 조사해 보세요.