una - socket python 3
Aplicación Cocoa cliente/servidor (5)
¿Existe alguna forma en Cocoa que actualmente se considere como la mejor práctica para crear una aplicación de servidor de varios niveles o cliente?
Soy un desarrollador web experimentado y realmente me encanta Python. Aunque soy nuevo en Cocoa. La aplicación que estoy jugando con la escritura es un sistema de administración de pacientes para un hospital grande. Se espera que el sistema almacene grandes cantidades de datos a lo largo del tiempo, pero los datos transferidos durante una sola sesión son muy livianos (principalmente solo texto). Se supone que la comunicación ocurre a través de una red local (cableada o inalámbrica). Tiene que ser altamente seguro, por supuesto.
Lo mejor que se me ocurre es escribir un servicio web REST de Python y conectarlo a través de la aplicación Cocoa. Tal vez incluso usaré Python para codificar la aplicación Cocoa.
En cuanto a Cocoa, veo tecnologías geniales en Cocoa como CoreData, pero no encontré nada similar para el desarrollo de servidores cliente. Solo quiero asegurarme de no perderme nada.
¿Qué piensas?
Los ejemplos del mundo real serán muy apreciados.
Gracias por adelantado.
Cocoa tiene Portable Distributed Objects , que le permiten construir una aplicación cliente / servidor en Objective-C puro y Cocoa que se puede comunicar a través de procesos o en una red.
Desafortunadamente es una de las cosas más difíciles de aprender en Cocoa. Los objetos distribuidos no se han actualizado para mantenerse al día con las nuevas tecnologías, como los enlaces, no hay muchos ejemplos o documentación (y muchos de los tutoriales son antiguos, algunos incluso antes de fechar OS X). También hay un montón de "trampas", incluso para los programadores cacao experimentados, en la forma en que los objetos se transmiten a través del cable, ya sea como una copia o un objeto proxy. Por ejemplo, puede transmitir un NSURL desde un servidor y se verá bien si lo convierte en una cadena o lo mira en el depurador, pero su cliente se bloqueará si intenta usarlo en una NSURLConnection.
Dependiendo de su experiencia, puede ser más fácil y rápido usar un servicio web, pero vale la pena consultarlo si desea mantener todo el proyecto en Cocoa. Aquí hay un tutorial si desea ver un ejemplo.
En general, las ideas de todos los otros marcos cliente / servidor son aplicables.
Eche un vistazo a este enlace: http://developer.apple.com/internet/webservices/webservicescoreandcfnetwork.html
Mire las API para NSConnection y NSDownload para manejar la conexión de red. La clase NSString también tiene métodos como + stringWithContentsOfURL: encoding: error: eso puede ser útil.
Luego está NSXMLParser y NSXMLDocument para leer datos xml.
Si tiene el control tanto del cliente como del servidor, y puede limitar el cliente a OS X solamente, respondo la respuesta de Marc. Los objetos distribuidos de Cocoa son una tecnología increíble y hacen que las aplicaciones cliente-servidor de estilo RPC sean muy fáciles.
Si los requisitos anteriores son demasiado restrictivos para usted, todavía tiene muchas opciones disponibles para usted en el mundo Cocoa:
Puede codificar toda la aplicación cliente en Python usando PyObjC. Con este enfoque, puede usar el código de red estándar con el que está familiarizado desde la biblioteca estándar de Python. Twisted también se integra muy bien con el ciclo de ejecución de Cocoa (ejemplos en el código de ejemplo PyObjC) y he tenido mucho éxito al usar Twisted para la comunicación de red en una aplicación Cocoa. Si elige seguir esta ruta, puede codificar la aplicación cliente en Objective-C y cargar el código python como un complemento (usando NSBundle).
py2app
de PyObjC puede compilar paquetes cargables a partir del código python.Puede usar NSURLConnection para obtener acceso de alto nivel a un servidor HTTP.
Descartando un nivel de abstracción, puede usar el NSStream de Cocoa para implementar su protocolo de red. La documentación de la clase está aquí , con enlaces a un código de ejemplo que demuestra los protocolos HTTP y SOAP.
Puede bajar otro nivel y usar las clases de CFNetwork. NSStream se basa en CFNetwork, pero tiene un control de nivel inferior sobre la línea utilizando CFNetwork.
Finalmente, la tecnología de Apple para arquitecturas cliente-servidor es el framework WebObjects .
He escrito un servidor y una clase de cliente para su uso en Cocoa. El uso de estas clases hace que sea muy fácil producir una aplicación de servidor o cliente sin el conocimiento sobre los sockets y ese material C. Solo eche un vistazo a mi sitio web o al sitio del proyecto sourceforge.net .