2010-11-11 16 views
6

Estoy escribiendo una aplicación usando Ruby y la biblioteca Eventmachine. Realmente me gusta la idea de E/S sin bloqueo y sistemas impulsados ​​por eventos, el problema que me estoy encontrando es el inicio de sesión. Estoy usando la biblioteca de registro estándar de Ruby. No es que el registro dure para siempre, pero parece algo que no debería bloquearse y lo hace. ¿Existe alguna biblioteca en alguna parte que extienda la implementación del registrador estándar de Ruby para que no sea bloqueante o debería simplemente llamar a EM :: defer para mis llamadas de registro? ¿Hay alguna manera de que pueda hacer que eventmachine haga esto por mí ya?¿Cómo iniciar sesión con Ruby y eventmachine?

+0

¿Has intentado delegar el registro en un nuevo hilo? – AndrewKS

+0

Eso es lo que EM :: defer me permitiría hacer, pero estoy buscando una forma de evitarlo. – Justin

Respuesta

3

acabé envolviendo el registrador en una clase singleton que se inició un hilo y tenía una cola FIFO. El registro arrojaría la información de registro a la cola y el hilo simplemente se enganchó, sacando cosas de la cola y usando el registrador real para iniciar sesión. No es realmente el patrón del reactor, pero tampoco masticará mi grupo de subprocesos EM.

Con este singleton, solo puede tener un registrador, pero esto es lo que hice en github.

+0

¿podría compartir algún código? –

+1

Enlace a lo que puse en github. ¡Conseguiste que fuera de código abierto! =) – Justin

+0

¿Hay una gema de registro que no engendra hilos, y en su lugar utiliza el procesamiento asincrónico nativo con devoluciones de llamadas? –

1

Si estás en un sistema con Syslog se puede echar un vistazo a EM-Syslog

Cuestiones relacionadas