move addTakeoverListener() to the Server API
Make addTakeoverListener() part of the top-level server API, instead of being specific to LibEventServerWithTakeover. Servers that don't support socket takeover simply ignore this call. This will allow future server implementations to support socket takeover. This also allows us to start making the server creation logic in HttpServer a bit more generic, since the code can always call addTakeoverListener() without having to know if it really has a LibEventServerWithTakeover or some other type of server.
Esse commit está contido em:
@@ -99,10 +99,10 @@ HttpServer::HttpServer(void *sslCTX /* = NULL */)
|
||||
RuntimeOption::RequestTimeoutSeconds);
|
||||
maybeEnableThrottle(server.get());
|
||||
server->setTransferFilename(RuntimeOption::TakeoverFilename);
|
||||
server->addTakeoverListener(this);
|
||||
m_pageServer = server;
|
||||
}
|
||||
m_pageServer->setRequestHandlerFactory<HttpRequestHandler>();
|
||||
m_pageServer->addTakeoverListener(this);
|
||||
|
||||
if (RuntimeOption::EnableSSL && m_sslCTX) {
|
||||
assert(SSLInit::IsInited());
|
||||
@@ -215,7 +215,7 @@ void HttpServer::onServerShutdown() {
|
||||
}
|
||||
}
|
||||
|
||||
void HttpServer::takeoverShutdown(LibEventServerWithTakeover* server) {
|
||||
void HttpServer::takeoverShutdown(HPHP::Server* server) {
|
||||
assert(server == m_pageServer.get());
|
||||
// We want to synchronously shut down our satellite servers to free up ports,
|
||||
// then asynchronously shut down everything else.
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
static time_t StartTime;
|
||||
|
||||
public:
|
||||
HttpServer(void *sslCTX = nullptr);
|
||||
explicit HttpServer(void *sslCTX = nullptr);
|
||||
~HttpServer();
|
||||
|
||||
void run();
|
||||
@@ -47,7 +47,7 @@ public:
|
||||
void flushLog();
|
||||
void watchDog();
|
||||
|
||||
void takeoverShutdown(LibEventServerWithTakeover* server);
|
||||
void takeoverShutdown(HPHP::Server* server);
|
||||
|
||||
ServerPtr getPageServer() { return m_pageServer;}
|
||||
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
namespace HPHP {
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TakeoverListener;
|
||||
|
||||
/**
|
||||
* LibEventServer that adds the ability to take over an accept socket
|
||||
* from another process, and give its accept socket up.
|
||||
@@ -42,10 +40,10 @@ public:
|
||||
m_transfer_fname = fname;
|
||||
}
|
||||
|
||||
void addTakeoverListener(TakeoverListener* lisener) {
|
||||
virtual void addTakeoverListener(TakeoverListener* lisener) {
|
||||
m_takeover_listeners.insert(lisener);
|
||||
}
|
||||
void removeTakeoverListener(TakeoverListener* lisener) {
|
||||
virtual void removeTakeoverListener(TakeoverListener* lisener) {
|
||||
m_takeover_listeners.erase(lisener);
|
||||
}
|
||||
|
||||
@@ -67,12 +65,6 @@ protected:
|
||||
bool m_took_over;
|
||||
};
|
||||
|
||||
class TakeoverListener {
|
||||
public:
|
||||
virtual ~TakeoverListener();
|
||||
virtual void takeoverShutdown(LibEventServerWithTakeover* server) = 0;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
|
||||
@@ -85,6 +85,16 @@ public:
|
||||
virtual void handleRequest(Transport *transport) = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* A callback to be informed when a server is shutting down because its socket
|
||||
* has been taken over by a new process.
|
||||
*/
|
||||
class TakeoverListener {
|
||||
public:
|
||||
virtual ~TakeoverListener();
|
||||
virtual void takeoverShutdown(Server* server) = 0;
|
||||
};
|
||||
|
||||
typedef std::function<std::unique_ptr<RequestHandler>()> RequestHandlerFactory;
|
||||
typedef std::function<bool(const std::string&)> URLChecker;
|
||||
|
||||
@@ -146,6 +156,14 @@ public:
|
||||
m_urlChecker = checker;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add or remove a TakeoverListener to this server.
|
||||
*
|
||||
* This is a no-op for servers that do not support socket takeover.
|
||||
*/
|
||||
virtual void addTakeoverListener(TakeoverListener* lisener) {}
|
||||
virtual void removeTakeoverListener(TakeoverListener* lisener) {}
|
||||
|
||||
/**
|
||||
* Informational.
|
||||
*/
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário