2016-03-01 10 views
0

Есть ли способ с помощью уловки bash/nc/xinetd/nginx для запуска TCP-сервера, который выводит только время Unix, а затем отключается?TCP-сервер, который обслуживает время unix

Клиент подключается к серверу TCP, а сервер выводит время unix в строковой форме, например. «1456860938», затем сервер отключает клиент.

Сервер должен продолжать работать, чтобы обслуживать множество клиентов, но продолжительность каждого соединения очень короткая.

+0

Используйте веб-сервер с php и php-страницей с этим контентом: 'echo time();' Output is (например,): '1456861853' – Cyrus

+0

Попытка не писать другой код веб-сервера, хотя это было бы очень просто. – garbagecollector

ответ

0

Быстрый скрипт python может сделать трюк. Я ссылался на это socket programming tutorial. Это чисто 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 
0

Предполагая, что вы используете стандартный inetd, вы можете просто добавить date в /etc/inetd.conf таким образом:

daytime   stream tcp  nowait nobody /bin/date date +%s 

После перезарядки (sudo pkill -HUP inetd) вы можете подтвердить результат:

$ netcat localhost daytime 
1456915174 

(Очевидно, используйте порт, отличный от daytime, если у вас уже есть демон.