
Quiero crear un servicio de Linux y poder comunicarme con él. Algo así como una base de datos que puedo agregar y obtener datos. ¿Hay alguna forma de comunicarme con mi servicio sin convertirlo en un servidor? Me refiero a no utilizar métodos http
ni https
para enviar ni recibir datos. Lo que quiero es una forma de conectarme al servicio sin usar un URL
número port
.
Respuesta1
Creo que la respuesta que estás buscando es usarsystemd.socket
Digamos que tengo algún programa que lee stdin y escribe en stdout. Puede configurar systemd para que sea accesible a través de un socket.
Aquí hay un ejemplo de cómo configurarías systemd para hacer eso:
# /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
Luego inicie el socket con:
$ sudo systemctl start simple.socket
Ahora puede ejecutar el servicio estableciendo un socket. Yo uso nc
o netcat
para esto:
$ nc 127.0.0.1 11111
En ExecStart
elijo usar cat -
el cual simplemente transmite stdin a stdout. Cuando ejecutemos nc
, descubriremos que todo lo que escribamos en stdin se nos devolverá a través de stdout. Probablemente tengas una aplicación que sea más interesante de la que quieras ejecutar.
Algunos otros puntos interesantes:
cat
no se está ejecutando si no tiene un socket abierto (el socket está escuchando pero el servicio está detenido).- Cuando estableces una conexión, el servicio se inicia.
- Si establece otra conexión, se inicia otra instancia del servicio.
- Cuando cierras una conexión, el servicio se detiene.
Respuesta2
Siempre que algo recibe conexiones, tienes un servidor. HTTP/S es sólo un protocolo entre muchos, muchos. También puede conectarse a una base de datos remota mediante su propio protocolo. Si está buscando una solución más compleja, lea sobre la tunelización SSH: hacia adelante y hacia atrás. Y systemd
de ninguna manera es un elemento necesario en su solución.
Respuesta3
Si desea acceder a esto solo en su máquina local y desea crear scripts simples, use un archivo quince. Si desea que otros sistemas en la red también tengan acceso, consulte netcat ( nc
).
Para los adeptos de Python, existe Flask y para los programadores de Perl, Dancer2.
En C , usarías socket
y bind
.listen
Y como comentó @tom: systemd
no tiene nada que ver con lo que estás pidiendo.
EDITAR:
tu adición
Lo que quiero es una forma de conectarme al servicio, excepto una URL y un número de puerto.
hace que no quede completamente claro lo que estás buscando.
Si desea comunicarse con una computadora, debe conocer su dirección. De lo contrario, nunca sabrá con quién se está comunicando. Tu base de datos y tu cliente también deben tener un protocolo acordado. De lo contrario no se entenderán. Y con eso, necesariamente tienes un URI.
Si no desea utilizar un número de puerto, como lo hacen TCP o UDP, puede utilizar otro protocolo (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) si eso te conviene. Entonces serían adecuados 253 o 254. Pero, y por favor no tome esto como condescendiente, parece que aún no tiene la habilidad para hacer que esto funcione.
Si acepta recomendaciones, intente utilizar primero un quince en el mismo sistema. Si eso funciona, investiga en netcat.