2 ms·
We got around this at my company by just pooling all of the LISTEN/NOTIFY streams into a single database connection in software, here's a sample implementation:
by colinchartier 3y ago
We got around this at my company by just pooling all of the LISTEN/NOTIFY streams into a single database connection in software, here's a sample implementation:
function software_listen(channel, callback):
if not channel_listened(channel):
sql("LISTEN " + channel)
listeners[channel].append(callback)
function on_message(channel, data):
for listener in listeners[channel]
listener(channel, data)
function unlisten(channel, listener):
listeners[channel].remove(listener)
if len(listeners[channel]) == 0:
sql("UNLISTEN " + channel)
Here's the actual go implementation we use:
https://gist.github.com/ColinChartier/59633c1006407478168b52e2318da8e8 https://gist.github.com/ColinChartier/59633c1006407478168b52...