Добрый день. Я сейчас прохожу курс повышения квалификации - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?
|
Сетевые приложения на Python
XML-RPC сервер
До сих пор высокоуровневые протоколы рассматривались с точки зрения клиента. Не менее просто создавать на Python и их серверные части. Для иллюстрации того, как разработать программу на Python, реализующую сервер, был выбран протокол XML-RPC. Несмотря на свое название, конечному пользователю необязательно знать XML (об этом языке разметки говорилось на одной из предыдущих лекций), так как он скрыт от него. Сокращение RPC ( R emote P rocedure C all, вызов удаленной процедуры) объясняет суть дела: с помощью XML-RPC можно вызывать процедуры на удаленном хосте. Причем при помощи XML-RPC можно абстрагироваться от конкретного языка программирования за счет использования общепринятых типов данных (строки, числа, логические значения и т.п.). В языке Python вызов удаленной функции по синтаксису ничем не отличается от вызова обычной функции:
import xmlrpclib # Установить соединение req = xmlrpclib.ServerProxy("http://localhost:8000") try: # Вызвать удаленную функцию print req.add(1, 3) except xmlrpclib.Error, v: print "ERROR",
А вот как выглядит XML-RPC-сервер (для того чтобы попробовать пример выше, необходимо сначала запустить сервер):
from SimpleXMLRPCServer import SimpleXMLRPCServer srv = SimpleXMLRPCServer(("localhost", 8000)) # Запустить сервер srv.register_function(pow) # Зарегистрировать функцию srv.register_function(lambda x,y: x+y, 'add') # И еще одну srv.serve_forever() # Обслуживать запросы
С помощью XML-RPC (а этот протокол достаточно "легковесный" среди других подобных протоколов) приложения могут общаться друг с другом на понятном им языке вызова функций с параметрами основных общепринятых типов и такими же возвращаемыми значениями. Преимуществом же Python является удобный синтаксис вызова удаленных функций.
Внимание! Разумеется, это только пример. При реальном использовании необходимо позаботиться, чтобы XML-RPC сервер отвечал требованиям безопасности. Кроме того, сервер лучше делать многопоточным, чтобы он мог обрабатывать несколько потоков одновременно. Для многопоточности (она будет обсуждаться в отдельной лекции) не нужно многое переделывать: достаточно определить свой класс, скажем, ThreadingXMLRPCServer, в котором вместо SocketServer.TCPServer использовать SocketServer.ThreadingTCPServer. Это предлагается в качестве упражнения. Наводящий вопрос: где находится определение класса SimpleXMLRPCServer? |
Заключение
В этой лекции на практических примерах и сведениях из документации были показаны возможности, которые дает стандартный Python для работы в Интернете. Из сценария на Python можно управлять соединением на уровне сокетов, а также использовать модули для конкретного сетевого протокола или набора протоколов. Для работы с сокетами служит модуль socket, а модули для высокоуровневых протоколов имеют такие названия как smtplib, poplib, httplib и т.п. Для работы с системой WWW можно использовать модули urllib, urllib2, urlparse. Указанные модули рассмотрены с точки зрения типичного применения. Для решения нестандартных задач лучше обратиться к другим источникам: документации, исходному коду модулей, поиску в Интернете. В этой лекции говорилось и о серверной составляющей высокоуровневых сетевых протоколов. В качестве примера приведена клиент-серверная пара для протокола XML-RPC. Этот протокол создан на основе HTTP, но служит специальной цели.