OverviewFilesCommitsIssuesDocsReleasesPeers

godot-marble_madness_demo commits / ef1de90

Request pool for HyperGossip (#1)
* Add request pool to HyperGossip * Actually add requests to the pool * Remove status console log
ef1de90fe0112626a992bab9cf6f06a46aece13b
by RangerMauve <RangerMauve@hotmail.com> · 2022-02-04T03:42:57.000Z

Changed files (1) +32 -14

hypergodot/hyper_gossip/hyper_gossip.gd +32 -14
……@@ -10,23 +10,33 @@ signal peers(peers)
1010
1111export var url = "hyper://blog.mauve.moe/"
1212export var extension_name = "hyper-gossip-v1"
13export var pool_size = 8
14export var queue_warning_size = 8
1315
1416var peerListRequest = HyperRequest.new()
1517var eventSource = HyperEventSource.new()
16var broadcastRequest = HyperRequest.new()
1718
18var seen_messages = LRU.new()
19# Pool of HyperRequest objects to send multiple broadcasts at once
20var requestPool = []
21# Queue of requests that should be sent out
1922var requestQueue = []
20var isRequesting = false
23# Track whether we have warned about sending more requests than can be handled
24var hasWarnedCapacity = false
25var seen_messages = LRU.new()
2126
2227func _ready():
2328 randomize()
2429
2530 add_child(peerListRequest)
2631 peerListRequest.connect("request_completed", self, "_on_peer_list")
32 peerListRequest.use_threads = true
2733
28 add_child(broadcastRequest)
29 broadcastRequest.connect("request_completed", self, "_on_broadcast_completed")
34 for i in range(pool_size):
35 var broadcastRequest = HyperRequest.new()
36 broadcastRequest.use_threads = true
37 add_child(broadcastRequest)
38 broadcastRequest.connect("request_completed", self, "_on_broadcast_completed")
39 requestPool.push_back(broadcastRequest)
3040
3141 add_child(eventSource)
3242 eventSource.connect("event", self, "_on_event")
……@@ -40,19 +50,28 @@ func _on_events_started(_statusCode, _responseHeaders):
4050 emit_signal("listening", extension_name)
4151
4252func _enqueue_broadcast_request(reqURL, body):
43 if isRequesting:
53 var broadcastRequest = _get_next_request()
54 if broadcastRequest == null:
55 print('Queueing')
4456 requestQueue.push_back({"reqURL": reqURL, "body": body})
45 else: _perform_broadcast_request(reqURL, body)
46
47func _perform_broadcast_request(reqURL, body):
48 isRequesting = true
49 broadcastRequest.request(reqURL, [], false, HTTPClient.METHOD_POST, body)
57 if requestQueue.size() > queue_warning_size && !hasWarnedCapacity:
58 hasWarnedCapacity = true
59 print_debug("Warning: You have more gossip events than your queue_warning_size permits, either slow down the rate or increase the pool_size to send more");
60 return
61
62 broadcastRequest.request(reqURL, [], false, HTTPClient.METHOD_POST, body)
63
64func _get_next_request():
65 for request in requestPool:
66 var status = request.get_http_client_status()
67 if status == HTTPClient.STATUS_DISCONNECTED:
68 return request
69 return null
5070
5171func _on_broadcast_completed(_result, _response_code, _headers, _body):
52 isRequesting = false
5372 if requestQueue.size() == 0: return
5473 var next = requestQueue.pop_front()
55 _perform_broadcast_request(next.reqURL, next.body)
74 _enqueue_broadcast_request(next.reqURL, next.body)
5675
5776func rebroadcast(event):
5877 var reqURL = _get_extension_url()
……@@ -75,7 +94,6 @@ func load_peers():
7594
7695func _generateEvent(type, data):
7796 var id = _make_id()
78 print("generateEvent ID : " + String(id) )
7997 seen_messages.track(id)
8098 return {
8199 "id": id,