Advertisement
sytchenko

Godot. Local HTTP Server gdscript

Feb 18th, 2025 (edited)
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends Node
  2.  
  3. var http_server = TCPServer.new()
  4. var clients = []
  5.  
  6. func _ready():
  7.     randomize()
  8.     Engine.max_fps = 5 # Частота обработки _process(_delta)
  9.     #http_server.listen(9497)  # Запуск сервера на порту 9497
  10.     http_server.listen(9497, "127.0.0.1")  # Запуск сервера на порту 9497, принимаем только локальные запросы
  11.     print("Godot HTTP сервер запущен на порту 9497")
  12.  
  13. func _process(_delta):
  14.     #print(randi() % 50)
  15.     #print(randfn())
  16.     # Принимаем новые подключения
  17.     if http_server.is_connection_available():
  18.         var client = http_server.take_connection()
  19.         if client:
  20.             clients.append(client)
  21.  
  22.     # Обрабатываем запросы клиентов
  23.     var disconnected_clients = []
  24.     for client in clients:
  25.         if client.get_status() != StreamPeerTCP.STATUS_CONNECTED:  # Проверяем статус соединения
  26.             disconnected_clients.append(client)
  27.             continue  # Пропускаем обработку для отключенных клиентов
  28.  
  29.         if client.get_available_bytes() > 0:
  30.             var request = client.get_partial_data(client.get_available_bytes())[1].get_string_from_utf8()
  31.             print("Получен запрос:\n", request)
  32.  
  33.             if "GET /" in request:
  34.                 send_http_response(client)
  35.  
  36.     # Удаляем отключенных клиентов
  37.     for client in disconnected_clients:
  38.         clients.erase(client)
  39.  
  40. func send_http_response(client):
  41.     var response = "HTTP/1.1 200 OK\r\n"
  42.     response += "Content-Type: text/plain\r\n"
  43.     response += "Content-Length: 13\r\n"
  44.     response += "Connection: close\r\n"
  45.     response += "\r\n"
  46.     response += "Hello, world!"
  47.  
  48.     client.put_data(response.to_utf8_buffer())
  49.     client.disconnect_from_host()  # Закрываем соединение
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement