Poco :: SocketReactor игнорирует порядок сообщений, но не должен - PullRequest
0 голосов
/ 08 апреля 2019

код: https://github.com/TeaBoyy/Test_RDP_Repository/tree/master/REACTOR_PROBLEM

Reactor - отличный шаблон, который позволяет использовать только один поток, чтобы принимать подключения и читать сообщения относительно асинхронно, но у меня есть проблема с SocketReactor: порядок событий неожиданный. Может быть, это из-за линейной проверки всех сокетов.

Давайте посмотрим на этот случай:

--- Розетка 1 ---- | ------- Розетка 2 ---- | ----- Розетка 4 -------

---- FIRST ---- | --------- ТРЕТИЙ ---------- | -------- ВТОРАЯ -------

---- ГОТОВ ---- | ------ НЕ ГОТОВ ---- | ----- НЕ ГОТОВ ----

((Где ПЕРВЫЙ, ВТОРОЙ и т. Д. - последовательность отправленных сообщений))

Итак, пока мы читаем Socket1, Socket2 может стать ГОТОВЫМ, и когда мы переключимся на Socket 2 (который является ТРЕТЬИМ), мы будем читать данные с него ДО Socket 4, который является ВТОРОМ.

Согласно этой статье: https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve

Каждый должен работать как шарм, но в моем случае это не так.

...