mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
SmartPtr: Support load test for source by srs-bench. v6.0.130 (#4097)
1. Add live benchmark support in srs-bench, which only connects and disconnects without any media transport, to test source creation and disposal and verify source memory leaks. 2. SmartPtr: Support cleanup of HTTP-FLV stream. Unregister the HTTP-FLV handler for the pattern and clean up the objects and resources. 3. Support benchmarking RTMP/SRT with srs-bench by integrating the gosrt and oryx RTMP libraries. 4. Refine SRT and RTC sources by using a timer to clean up the sources, following the same strategy as the Live source. --------- Co-authored-by: Haibo Chen <495810242@qq.com> Co-authored-by: Jacob Su <suzp1984@gmail.com>
This commit is contained in:
parent
e3d74fb045
commit
1f9309ae25
508 changed files with 6805 additions and 3299 deletions
|
@ -691,14 +691,12 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler* handle
|
|||
srs_assert(handler);
|
||||
|
||||
if (pattern.empty()) {
|
||||
srs_freep(handler);
|
||||
return srs_error_new(ERROR_HTTP_PATTERN_EMPTY, "empty pattern");
|
||||
}
|
||||
|
||||
if (entries.find(pattern) != entries.end()) {
|
||||
SrsHttpMuxEntry* exists = entries[pattern];
|
||||
if (exists->explicit_match) {
|
||||
srs_freep(handler);
|
||||
return srs_error_new(ERROR_HTTP_PATTERN_DUPLICATED, "pattern=%s exists", pattern.c_str());
|
||||
}
|
||||
}
|
||||
|
@ -754,6 +752,32 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler* handle
|
|||
return srs_success;
|
||||
}
|
||||
|
||||
void SrsHttpServeMux::unhandle(std::string pattern, ISrsHttpHandler* handler)
|
||||
{
|
||||
if (true) {
|
||||
std::map<std::string, SrsHttpMuxEntry*>::iterator it = entries.find(pattern);
|
||||
if (it != entries.end()) {
|
||||
SrsHttpMuxEntry* entry = it->second;
|
||||
entries.erase(it);
|
||||
|
||||
// We don't free the handler, because user should free it.
|
||||
if (entry->handler != handler) {
|
||||
srs_freep(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string vhost = pattern;
|
||||
if (pattern.at(0) != '/') {
|
||||
if (pattern.find("/") != string::npos) {
|
||||
vhost = pattern.substr(0, pattern.find("/"));
|
||||
}
|
||||
|
||||
std::map<std::string, ISrsHttpHandler*>::iterator it = vhosts.find(vhost);
|
||||
if (it != vhosts.end()) vhosts.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpServeMux::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
|
|
@ -470,6 +470,8 @@ public:
|
|||
// Handle registers the handler for the given pattern.
|
||||
// If a handler already exists for pattern, Handle panics.
|
||||
virtual srs_error_t handle(std::string pattern, ISrsHttpHandler* handler);
|
||||
// Remove the handler for pattern. Note that this will not free the handler.
|
||||
void unhandle(std::string pattern, ISrsHttpHandler* handler);
|
||||
// Interface ISrsHttpServeMux
|
||||
public:
|
||||
virtual srs_error_t serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue