Привет, я работаю над портом прослушивания TCP Socket с python и вставляю данные в postgresql.Операционная система Ubunutu Server 16.04.3 LTS.Когда все клиенты подключаются первыми, ЦП не загружен.И когда клиент отключается от сокета, я вижу, что сокет все еще подключен, а клиент снова подключен, другой сокет. Вставка работает хорошо. Я буду слушать 2000 клиентов.1-Как сокет может остановиться при отключении клиента?2-Почему процессор загружен на 100?
PY:
import socket
import threading
import psycopg2
import string
import datetime
import resource
resource.setrlimit(resource.RLIMIT_NOFILE, (65536, 65536))
bind_ip = '0.0.0.0'
bind_port = 1339
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5000) # max backlog of connections
connection = psycopg2.connect(user = "USER",password = "PASS",host = "127.0.0.1",port = "5432",database = "DB")
cursor = connection.cursor()
print 'Listening on {}:{}'.format(bind_ip, bind_port)
def handle_client_connection(client_socket,address):
while 1:
request = client_socket.recv(1024)
request_arr = string.split(request, ",")
# print 'Received {}'.format(request)
now = datetime.datetime.now()
if request_arr[0] == '*HQ':
try:
nowdate=now.strftime("%Y-%m-%d")
nowtime=now.strftime("%H:%M:%S")
record_datetime=now.strftime("%Y-%m-%d %H:%M:%S")
postgres_insert_query = """ INSERT INTO public.listener (id) VALUES (%s)"""
record_to_insert = (request_arr[1])
cursor.execute(postgres_insert_query, record_to_insert)
connection.commit()
except Exception:
pass
while True:
client_sock, address = server.accept()
print 'Accepted connection from {}:{}'.format(address[0], address[1])
client_handler = threading.Thread(
target=handle_client_connection,
args=(client_sock,address[0],)
)
client_handler.start()