код:
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
Каждый должен работать как шарм, но в моем случае это не так.