>> To best plugin for starting is plugins/emperor_pg (the postgresql one).
>>
>> Basically you "register" an "imperial monitor" and it will be triggered
>> at
>> the right moment.
>
> In this case, the emperor doesn't know the right moment. My plugin will
> be notified via a socket when it needs to do something. So I don't want
> to add/stop/respawn the vassals when the emperor loops through my plugin.
>
> I only need to add vassals on startup. How do I do that? A flag in
> _init, and then clear the flag in the monitor func?
>
>> Only the emperor process has access to the "ui" pointer, while the
>> init()
>> hook is called on startup (before it is available as you have already
>> noted)
>
> That simple change seemd to work still
>
> --
> дамјан
> _______________________________________________
> uWSGI mailing list
> [email protected]
> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>
You can register a uwsgi_thread (is a funny abstraction that gives you a
thread and a communication channel) in the imperial monitor and just call
the various emperor_add() on the first round and after that you simply
wait for events.
In pseudo-code:
// this run continuously from a thread waiting for your socket
my_loop(ut) {
for(;;) {
wait_for_event_on_your_socket();
// write a message to the thread communication channel
write(ut->pipe[0], "message", msg_len);
}
}
// this function is called by the emperor whenever the thread send a message
void foobar_event(ues) {
char msg[4096];
ssize_t len = read(ues->fd, msg, 4096);
...do something with the message...
}
the imperial monitor
yourplugin_imperial_cycle(ues) {
// on the first round you create the thread
// and you spawns the static vassals
// on the second round you start monitoring events from your thread
int round = 0;
if (round == 0) {
uwsgi_thread *ut = uwsgi_thread_new(my_loop);
emperor_add()
emperor_add()
emperor_add()
round++;
}
else if (round == 1) {
// this set the function to call whenever a message
//is generated on the thread
ues->event_func = foobar_event;
// here we start waiting for thread events
event_queue_add_fd_read(uwsgi.emperor_queue, ut->pipe[1]);
round++;
}
}
--
Roberto De Ioris
http://unbit.it
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi