В качестве дополнения к учебному пособию по сетевому клиенту в этом учебном пособии показано, как реализовать простой веб-сервер в питон. Безусловно, это не заменит Apache или Zope. Существуют также более надежные способы реализации веб-служб в Python с использованием таких модулей, как BaseHTTPServer. Этот сервер использует исключительно модуль сокетов.
Вы помните, что модуль сокетов является основой большинства модулей веб-сервисов Python. Как и в случае с простым сетевым клиентом, создание сервера с его помощью наглядно иллюстрирует основы веб-сервисов в Python. BaseHTTPServer сам импортирует модуль сокета для воздействия на сервер.
В порядке обзора все сетевые транзакции происходят между клиентами и серверами. В большинстве протоколов клиенты запрашивают определенный адрес и получают данные.
В пределах каждого адреса может работать множество серверов. Предел в аппаратном обеспечении. При наличии достаточного количества аппаратного обеспечения (оперативной памяти, скорости процессора и т. Д.) Один и тот же компьютер может выполнять роль веб-сервера, FTP-сервера и
почтовый сервер (pop, smtp, imap или все вышеперечисленное) одновременно. Каждый сервис связан с портом. Порт связан с сокетом. Сервер прослушивает связанный с ним порт и выдает информацию, когда запросы поступают на этот порт.Таким образом, чтобы повлиять на сетевое соединение, вам нужно знать хост, порт и действия, разрешенные для этого порта. Большинство веб-серверов работают на порту 80. Однако во избежание конфликта с установленным сервером Apache наш веб-сервер будет работать через порт 8080. Чтобы избежать конфликта с другими службами, лучше всего поддерживать службы HTTP на порте 80 или 8080. Это два наиболее распространенных. Очевидно, что если они используются, вы должны найти открытый порт и предупредить пользователей об изменениях.
Как и в случае с сетевым клиентом, следует помнить, что эти адреса являются общими номерами портов для различных служб. Пока клиент запрашивает правильное обслуживание на правильном порту в правильном адресе, связь все еще будет происходить. Google-х почтовый сервис, например, изначально не работал на общих номерах портов, но, поскольку они знают, как получить доступ к своим учетным записям, пользователи все еще могут получать свою почту.
В отличие от сетевого клиента, все переменные на сервере являются аппаратными. Любая служба, которая должна работать постоянно, не должна иметь переменных своей внутренней логики, установленных в командной строке. Единственное изменение в этом случае будет, если по какой-то причине вы захотите, чтобы служба запускалась периодически и на разных номерах портов. Однако, если бы это было так, вы все равно могли бы наблюдать за системным временем и соответствующим образом изменять привязки.
Как уже упоминалось, сервер должен знать хост, с которым он должен быть связан, и порт, на котором он будет прослушиваться. В наших целях мы будем применять эту службу к любому имени хоста.
Порт, как упоминалось ранее, будет 8080. Поэтому обратите внимание, что если вы используете этот сервер вместе с сетевым клиентом, вам нужно будет изменить номер порта, используемый в этом программа.
Нужно ли запрашивать информацию или обслуживать ее, чтобы получить доступ к интернетнам нужно создать сокет. Синтаксис этого вызова следующий:
Первые два, очевидно, интернет-протоколы. Все, что путешествует через Интернет, может быть доступно в этих семьях. Многие сети по-прежнему не работают на IPv6. Поэтому, если вы не знаете иное, по умолчанию безопаснее использовать IPv4 и использовать AF_INET.
Безусловно, наиболее распространенными типами являются SOCK_STEAM и SOCK_DGRAM, потому что они функционируют на двух протоколах набора IP (TCP и UDP). Последние три гораздо реже и поэтому не всегда могут быть поддержаны.
После создания сокета нам нужно установить параметры сокета. Для любого объекта сокета вы можете установить параметры сокета с помощью метода setsockopt (). Синтаксис выглядит следующим образом:
Если мы хотим дать отзыв человеку, который вызывает сервер, мы можем теперь ввести команду печати, чтобы подтвердить, что сервер запущен и работает.
Настроив сервер, теперь нужно сказать питон что делать, если запрос сделан на данный порт. Для этого мы ссылаемся на запрос по его значению и используем его в качестве аргумента постоянного цикла while.
Когда запрос сделан, сервер должен принять запрос и создать объект файла для взаимодействия с ним.
В этом случае сервер использует один и тот же порт для чтения и записи. Поэтому методу makefile присваивается аргумент 'rw'. Нулевая длина размера буфера просто оставляет ту часть файла, которая определяется динамически.
Если мы не хотим создать сервер одиночного действия, следующим шагом будет чтение входных данных из файлового объекта. Когда мы делаем это, мы должны быть осторожны, чтобы убрать этот ввод лишних пробелов.
Запрос будет представлен в форме действия, за которым следуют страница, протокол и версия используемого протокола. Если кто-то хочет обслуживать веб-страницу, он разбивает этот ввод для получения запрошенной страницы, а затем считывает эту страницу в переменную, которая затем записывается в объект файла сокета. Функция для чтения файла в словарь можно найти в блоге.
Чтобы сделать этот урок более наглядным, что можно сделать с модулем сокета, мы отказались от этой части сервера и вместо этого покажем, как можно нюансировать представление данных. Введите следующие несколько строк в программа.
Если вы отправляете веб-страницу, первая строка - это хороший способ представить данные в веб-браузере. Если он пропущен, большинство веб-браузеров по умолчанию будут отображать HTML. Тем не менее, если один из них включает, «ОК» должен сопровождаться два символы новой строки. Они используются, чтобы отличить информацию протокола от содержимого страницы.
Синтаксис первой строки, как вы можете догадаться, это протокол, версия протокола, номер сообщения и статус. Если вы когда-либо заходили на перемещенную веб-страницу, вы, вероятно, получили ошибку 404. Сообщение 200 здесь просто утвердительное сообщение.
Остальная часть вывода - это просто веб-страница, разбитая на несколько строк. Вы заметите, что сервер может быть запрограммирован на использование пользовательских данных в выводе. Последняя строка отражает веб-запрос в том виде, в котором он был получен сервером.
Наконец, в качестве закрывающих действий запроса нам нужно закрыть объект файла и сокет сервера.
Теперь сохраните эту программу под узнаваемым именем. После того, как вы вызвали его с помощью «python program_name.py», если вы запрограммировали сообщение, чтобы подтвердить, что служба работает, это должно отобразиться на экране. Терминал тогда будет казаться приостановленным. Все как и должно быть. Откройте браузер и перейдите на localhost: 8080. Затем вы должны увидеть вывод команд записи, которые мы дали. Обратите внимание, что из-за недостатка места в этой программе я не реализовал обработку ошибок. Тем не менее, любая программа, выпущенная в «дикий» следует.