net/http/server.lua
changeset 5506 69ee5b10738d
parent 5487 03ddf2375d48
child 5504 b760b5f0c2b0
equal deleted inserted replaced
5502:c773aa4467f1 5506:69ee5b10738d
    24 	return event:sub(-2, -1) == "/*";
    24 	return event:sub(-2, -1) == "/*";
    25 end
    25 end
    26 local function is_wildcard_match(wildcard_event, event)
    26 local function is_wildcard_match(wildcard_event, event)
    27 	return wildcard_event:sub(1, -2) == event:sub(1, #wildcard_event-1);
    27 	return wildcard_event:sub(1, -2) == event:sub(1, #wildcard_event-1);
    28 end
    28 end
       
    29 
       
    30 local recent_wildcard_events, max_cached_wildcard_events = {}, 10000;
    29 
    31 
    30 local event_map = events._event_map;
    32 local event_map = events._event_map;
    31 setmetatable(events._handlers, {
    33 setmetatable(events._handlers, {
    32 	__index = function (handlers, curr_event)
    34 	__index = function (handlers, curr_event)
    33 		if is_wildcard_event(curr_event) then return; end -- Wildcard events cannot be fired
    35 		if is_wildcard_event(curr_event) then return; end -- Wildcard events cannot be fired
    56 			end);
    58 			end);
    57 		else
    59 		else
    58 			handlers_array = false;
    60 			handlers_array = false;
    59 		end
    61 		end
    60 		rawset(handlers, curr_event, handlers_array);
    62 		rawset(handlers, curr_event, handlers_array);
       
    63 		if not event_map[curr_event] then -- Only wildcard handlers match, if any
       
    64 			table.insert(recent_wildcard_events, curr_event);
       
    65 			if #recent_wildcard_events > max_cached_wildcard_events then
       
    66 				rawset(handlers, table.remove(recent_wildcard_events, 1), nil);
       
    67 			end
       
    68 		end
    61 		return handlers_array;
    69 		return handlers_array;
    62 	end;
    70 	end;
    63 	__newindex = function (handlers, curr_event, handlers_array)
    71 	__newindex = function (handlers, curr_event, handlers_array)
    64 		if handlers_array == nil
    72 		if handlers_array == nil
    65 		and is_wildcard_event(curr_event) then
    73 		and is_wildcard_event(curr_event) then