TCP-сервер, который обслуживает время Unix
Есть ли способ с помощью хитрой хитрости bash/nc/xinetd/nginx запустить TCP-сервер, который выводит только время Unix, а затем отключается?
Клиент подключается к серверу TCP, и сервер выводит время Unix в виде строки, например, "1456860938", затем сервер отключает клиента.
Сервер должен продолжать работать для обслуживания многих клиентов, но продолжительность каждого соединения очень мала.
2 ответа
Предполагая, что вы используете стандарт inetd
Вы можете просто добавить date
в /etc/inetd.conf
таким образом:
daytime stream tcp nowait nobody /bin/date date +%s
После перезагрузки (sudo pkill -HUP inetd
), вы можете проверить результат:
$ netcat localhost daytime
1456915174
(Очевидно, используйте порт, отличный от daytime
если вы уже запустили там демона).
Быстрый скрипт на Python может помочь. Я ссылался на это руководство по программированию сокетов. Это чисто TCP, а не HTTP-сервер
'''
TCP Time Server
'''
import socket
import sys
import time
import signal
HOST = '' # blank for All interfaces
PORT = 8000 # Port to listen on
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Signal handler to close the socket on exit
def signal_handler(signal, frame):
s.close()
sys.exit(0)
# Bind to port
try:
s.bind((HOST, PORT))
signal.signal(signal.SIGINT, signal_handler)
except socket.error as msg:
print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
sys.exit()
# Listen for connections
s.listen(1)
print('Ready to serve')
# Except connections forever
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
conn.sendall(str(int(time.time())))
conn.close()
Образец вывода:
$ nc localhost 8000
1456868540