Emperor协议

从1.3开始,你可以通过 Emperor 生成自定义应用。

非uWSGI Vassal应该永不进行守护,以维持与Emperor的链接。如果你想/需要与Emperor更好的集成,那么实现Emperor协议。

协议

环境变量 UWSGI_EMPEROR_FD 会被传递给每个vassal,包含一个文件描述符号。

import os
has_emperor = os.environ.get('UWSGI_EMPEROR_FD')
if has_emperor:
   print "I'm a vassal snake!"

或者在Perl中,

my $has_emperor = $ENV{'UWSGI_EMPEROR_FD'}
if ($has_emperor) {
  print "I am a vassal.\n"
}

或者在C中,

int emperor_fd = -1;
char *has_emperor = getenv("UWSGI_EMPEROR_FD");
if (has_emperor) {
    emperor_fd = atoi(has_emperor);
    fprintf(stderr, "I am a vassal.\n");
}

从现在开始,你可以通过这个文件描述符从Emperor接收信息(发送信息到Emperor)。

消息时字节大小 (0-255),并且每个数字 (字节) 都有其含义。

0 由Emperor发送,用来停止一个vassal
1 由Emperor发送,用来重载一个vassal / 当vassal已经生成时,由其发送
2 由vassal发送,用来向Emperor请求配置块
5 当vassal准备好接收请求时,由其发送
17 在第一个宣告loyalty的请求后,由vassal发送
22 由vassal发送,用来通知Emperor自愿的关闭
26 vassal发送的心跳。在第一个接收到的心跳之后,Emperor将会期待更多来自该vassal的心跳。
30 由vassal发送,用来请求 利用Broodlord模式实现自动伸缩 模式。