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
Другие вопросы по тегам