2009-08-31 12 views
12

Después de leer el libro de Joe Armstrong y ver las capturas de pantalla de Kevin Smith, he creado una aplicación OTP simple compuesta por un solo gen_server y supervisor único, agrupados como una aplicación OTP.Cuándo usar gen_server en aplicaciones Erlang/OTP

Ahora estoy buscando en mochiweb y he creado un proyecto de ejemplo [helloworld] usando el script new_mochiweb.erl. Al navegar por el código fuente veo que no es diferente de mi aplicación OTP de muestra [la aplicación OTP está ahí, el supervisor está allí] con una diferencia de clave ... los archivos helloworld.erl y helloworld_web.erl generados no implementan el comportamiento gen_server, son solo módulos estándar de Erlang.

Tenía la impresión de que el uso de gen_server era el camino recomendado para construir componentes de aplicaciones OTP. ¿Por qué podría mochiweb usar la aplicación OTP y los comportamientos de supervisor, pero evitar gen_server?

Respuesta

4

Hay un gen_server, llamado mochiweb_socket_server. Los módulos generados son solo "módulos de devolución de llamada" para que se llame al gen_server al recibir una solicitud entrante.

10

Utiliza OTP/gen_servers para procesos que están bajo una estrategia de reinicio - que es el reinicio de ellos está en su control.

Ese no es el caso con los procesos que representan las conexiones a los navegadores web. Si ese proceso se extingue, no hay forma de que el servidor lo reinicie; por lo tanto, ejecutarlo bajo OTP no tiene sentido.

Mochiweb (y Yaws) ambos usan gen_servers para vincularse al puerto de escucha y generar un proceso no supervisado para manejar una nueva conexión.

+3

La aplicación stdlib es una aplicación OTP. Cuando se inicia, no tiene partes en ejecución. Es una aplicación de biblioteca simple, allí para los módulos que carga, por lo que otras aplicaciones OTP pueden depender de ella para obtener todos sus módulos. Entonces todavía hay razones para usar OTP cuando uno solo introduce módulos. – Christian

+0

Tienes razón, estaba siendo un poco chapucero en mi idioma ... Debes empaquetar todo tu código en la forma normal de OTP usando los directorios y esas cosas, pero a veces lo correcto es generar algo en lugar de usar gen_server. para comenzarlo –

Cuestiones relacionadas