Fixed topic gc bug
This commit is contained in:
		
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @@ -13,8 +13,8 @@ phar: ## Build .phar using pharlite | ||||
| 	git clone $(REPODIR) $(BUILDDIR) && \ | ||||
| 		cd $(BUILDDIR) && \ | ||||
| 		composer install --no-dev && \ | ||||
| 		pharlite && \ | ||||
| 		mv $(BUILDDIR)/*.phar . && \ | ||||
| 		pharlite | ||||
| 	mv $(BUILDDIR)/*.phar $(REPODIR) && \ | ||||
| 		rm -rf $(BUILDDIR) | ||||
|  | ||||
| .PHONY: phpstan | ||||
|   | ||||
| @@ -43,7 +43,7 @@ $ ./mercureact.phar -c mercureact.conf | ||||
| * [x] Subscription/Topic manager | ||||
|   * [x] Unify distribution | ||||
|   * [ ] Enumerate subscriptions and topics | ||||
| * [ ] Publish events | ||||
| * [x] Publish events | ||||
| * [x] Server-Side Events distributor | ||||
|   * [x] Distribute events over SSE | ||||
| * [ ] WebSocket distributor | ||||
|   | ||||
| @@ -69,7 +69,7 @@ class TopicManager | ||||
|             $this->topics, | ||||
|             function (Topic $topic) { | ||||
|                 $topic->garbageCollect(); | ||||
|                 return ($topic->getHistorySize() > 0 && $topic->getSubscriberCount() > 0) || ($topic->getAge() < 60); | ||||
|                 return ($topic->getHistorySize() > 0 || $topic->getSubscriberCount() > 0) || ($topic->getAge() < 60); | ||||
|             } | ||||
|         ); | ||||
|     } | ||||
|   | ||||
| @@ -55,6 +55,7 @@ class ResponseMiddleware | ||||
|                 if ($t instanceof SecurityException) { | ||||
|                     return Response::plaintext("Access Denied")->withStatus(Response::STATUS_UNAUTHORIZED); | ||||
|                 } | ||||
|                 $this->logger->warning(get_class($t).": ".$t->getMessage(), [ 'file'=>$t->getFile(), 'line'=>$t->getLine() ]); | ||||
|                 return Response::plaintext("500: Internal Server Error (".$t->getMessage().")\n")->withStatus(500); | ||||
|             } | ||||
|         )->then( | ||||
|   | ||||
| @@ -54,6 +54,9 @@ class Server | ||||
|         $this->logger = $this->createLogger(); | ||||
|  | ||||
|         $this->topicManager = new TopicManager(); | ||||
|         $this->loop->addPeriodicTimer(30, function () { | ||||
|             $this->topicManager->garbageCollect(); | ||||
|         }); | ||||
|          | ||||
|         $this->webSocketClients = new SplObjectStorage(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user