Middle tier для Python
От: DemAS http://demas.me
Дата: 09.04.09 11:53
Оценка:
Есть приложение, которое работает с базой данных и имеет несколько
клиентов — web-клиент, клиент на PyQt, клиент на PyGtk.

Есть желание вынести всю бизнес логику, которая сейчас содержится в
отдельный классах на отдельный узел(компьютер) в сети.

То есть, хотется написать некий сервис, который будет принимать запросы
от этих клиентов, делать запросы к базе данных и возвращать клиентам
результаты запросов, в виде объектов и их коллекций.

Вопрос — как в python между двумя различными python-программами,
работающими на разных компах в сети, можно передавать объекты и их
коллекции?
Posted via RSDN NNTP Server 2.1 beta
Re: Middle tier для Python
От: Mr.Cat  
Дата: 09.04.09 12:21
Оценка:
Здравствуйте, DemAS, Вы писали:
DAS>Вопрос — как в python между двумя различными python-программами,
DAS>работающими на разных компах в сети, можно передавать объекты и их
DAS>коллекции?

Soap, xml(или json)-rpc?
Re[2]: Middle tier для Python
От: DemAS http://demas.me
Дата: 09.04.09 13:05
Оценка:
> Soap, xml(или json)-rpc?

До XML-RPC я уже дошел
А не знаешь — эта технология позволет возвращать с сервера на клиент классы?

Сервер:

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
     rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
                             requestHandler=RequestHandler)
server.register_introspection_functions()

class MyClass:
     def __init__(self, a):
         self.a = a
     def say(self):
         return a

def return_my_class():
     return MyClass(100)

server.register_function(return_my_class, 'my_class')

# Run the server's main loop
server.serve_forever()


Клиент:
import xmlrpclib

s = xmlrpclib.ServerProxy('http://localhost:8000')

o = s.my_class()
print o
o.say()


Вывод:

{'a': 100}
Traceback (most recent call last):
File "rpc_client.py", line 7, in <module>
o.say()


Я кончено понимаю, что я могу на сервере сериализовать класс в список, а
на клиенте из списка восстановить класс, но не хочется изобретать
велосипед.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Middle tier для Python
От: Mr.Cat  
Дата: 09.04.09 14:12
Оценка:
Здравствуйте, DemAS, Вы писали:
DAS>А не знаешь — эта технология позволет возвращать с сервера на клиент классы?
Полагаю, если прикрутить pickle — то можно. Здесь что-то по этому поводу есть, но в несколько негативной окраске — мол, xml-rpc для полноценной сериализации не годится.

Еще soap можно попробовать — он вроде наоборот именно для передачи обектов предназначался.
Re[4]: Middle tier для Python
От: DemAS http://demas.me
Дата: 09.04.09 19:08
Оценка: 5 (1)
Еще посоветовали:
— Pyro (http://pyro.sourceforge.net/)
— RPyC (http://rpyc.wikidot.com/)

Буду смотреть.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Middle tier для Python
От: Werser  
Дата: 10.04.09 01:12
Оценка: 5 (1)
Здравствуйте, Mr.Cat, Вы писали:

MC>Еще soap можно попробовать — он вроде наоборот именно для передачи обектов предназначался.


(SOAP — XML) + JSON = SOAPjr
Жаль, что для python библиотеки пока в разработке.
Re[5]: Middle tier для Python
От: Mr.Cat  
Дата: 10.04.09 06:03
Оценка:
Здравствуйте, Werser, Вы писали:
W>Жаль, что для python библиотеки пока в разработке.

Странно, в силу популярности питона, должны были бы появиться одними из первых.
Re: Middle tier для Python
От: smb- Россия  
Дата: 12.04.09 14:26
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>Есть приложение, которое работает с базой данных и имеет несколько

DAS>клиентов — web-клиент, клиент на PyQt, клиент на PyGtk.

DAS>Есть желание вынести всю бизнес логику, которая сейчас содержится в

DAS>отдельный классах на отдельный узел(компьютер) в сети.

DAS>То есть, хотется написать некий сервис, который будет принимать запросы

DAS>от этих клиентов, делать запросы к базе данных и возвращать клиентам
DAS>результаты запросов, в виде объектов и их коллекций.

DAS>Вопрос — как в python между двумя различными python-программами,

DAS>работающими на разных компах в сети, можно передавать объекты и их
DAS>коллекции?

Я бы посоветовал использовать библиотеку Zeroc ICE. Конечно, возможно она будет немного overkill-ом в этом, возможно, простом случае, но зато она предоставляет удобный RPC(хотя с первого взгляда он может показаться нетривиальным), а также (де)сериализацию. Ну и еще кучу плюшек
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.