Тайм-аут прослушивания PostgresC#

Место общения программистов C#
Ответить
Anonymous
 Тайм-аут прослушивания Postgres

Сообщение Anonymous »

Я использую Postgres 9.5, в котором есть функция LISTEN/NOTIFY, позволяющая настроить асинхронный командный канал для получения уведомлений с сервера. В течение первых 10–15 минут, когда мое приложение работает и я проверяю уведомления, кажется, что все работает, но по прошествии определенного времени сообщения просто удаляются.

Есть ли у кого-нибудь предложения о том, что может предотвратить такое поведение? Имеет ли это какое-либо отношение к настройкам поддержания активности/TCP? В pg_state_activity я вижу то же самое соединение, но оно находится в состоянии ожидания.

Общее описание ситуации
  • Использование библиотеки npgsql на C# для внешнего сервера Postgresql
  • Использование длительного соединения (настройка прослушивания, ожидания)
  • Выполнение запроса на прослушивание входящих уведомлений и уведомлений
  • Ожидание (с токеном отмены) до получения сообщения (при подключении никаких других действий не происходит).
Просматривая некоторые другие ответы на StackOverflow, кажется, что люди также связывают это с объединением в пул, хотя я не совсем уверен, что это хорошо переводится на npgsql< /code>, поскольку он объединяет соединения при подключении/отключении.

Я был бы признателен за любые идеи, которые люди имеют относительно этой проблемы, у кого-нибудь есть идеи, как я могу заставить мою ситуацию работать? Вот фрагмент кода, который является виновником: https://gist.github.com/phr34k/3a59af15 ... 2271052a6a

Изменить
В ответ на ответ jjanes я пошел на дальнейшее расследование. Когда я смотрю в pg_state_activity, он показывает соединение в состоянии ожидания. Когда я перекрестно ссылаюсь на номер порта клиента с помощью netstat -t на сервере, по крайней мере, я не вижу соединения в списке.

Честно говоря, перед запуском netstat -t я пытался использовать pg_notify, поэтому пока не уверен, можно ли запустить pg_notify не привел к его завершению. Однако странно то, что соединение продолжает отображаться в pg_state_activity, как будто Postgres даже не осознавал, что соединение было закрыто?

Я так думаю имеет какое-то отношение к брандмауэрам и незанятым соединениям. Кто-нибудь знает, есть ли что-нибудь по умолчанию в стеке Ubuntu/digital Ocean, которое через некоторое время уничтожает соединения?

Подробнее здесь: https://stackoverflow.com/questions/603 ... en-timeout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»