|
|
|
|
|
by colinchartier
1095 days 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/59633c1006407478168b52... |
|