Возможно ли иметь два буст-акцептора в одной программе? - PullRequest
0 голосов
/ 20 декабря 2018

Мой буст-сервер случайно прекратил принимать входящие соединения, потому что какой-то другой парень из моей команды создал еще один сервер, используя буст-акцептор в другом потоке (используя другой порт)?Это нормально и как заставить их два сервера работать независимо друг от друга и не связываться друг с другом?

РЕШЕНО: акцепторы не имеют к этому никакого отношения, парень где-то запустил бесконечный цикл, который блокировал другие компоненты.Я думаю, это то, что происходит, когда команда работает не скоординированно :( Извините, ребята, как всегда, она лучшая

1 Ответ

0 голосов
/ 20 декабря 2018

Мы прекрасно используем несколько акцепторов с одним io_service, как и планировалось.

Кроме того, мы распределяем работу между несколькими другими экземплярами io_service, используя одни и те же сокеты.просто отлично, как и задумано.

То, что может происходить в вашей кодовой базе, будет антипаттерном: если люди будут вызывать stop() в вашем io_service экземпляре, тогда да, это может привести к хаосу в любых других асинхронных операциях.поставленные в очередь в одном и том же экземпляре.

Таким образом, в целом идея состоит в том, чтобы избегать использования stop() или аналогичных операций "времени жизни" для общего экземпляра io_service.Единственное подходящее время для такого вызова было бы во время последовательности принудительного отключения , но действительно изящное отключение должно позволить всем активным соединениям завершить работу и ожидающая работа должна быть истощена, так что потоки, работающие io_service::run, могли бы самопроизвольно завершитьсяв любом случае.

См. также:

...