Я работаю с Socket.io за последние несколько месяцев, разрабатывая довольно сложное приложение для чата с чатами, ногами/запретами/модераторами/друзьями/и т.д.
В ходе разработки я несколько раз переписал приложение, и я все еще сражаюсь с моим кодом.
Мне очень нравится JavaScript, но мне очень сложно поддерживать приложение по мере его роста. Я прочитал огромное количество "учебников" о том, как писать чат-приложения, но все они охватывают только самые основные аспекты. То же самое касается всех приложений на GitHub и даже большинства чат-приложений, которые я нашел в Интернете (большинство из них - просто простой IM без какого-либо управления пользователями).
Некоторые примеры использования кажутся мне слишком смешными, например, ногами пользователя из комнаты.
- Модератор нажимает на кнопку kick → выдает событие на сервер
- сервер связывает имя пользователя с сокетом (или просто передается всем пользователям и фильтрует на стороне клиента) → выдавать ему нокаутированное событие
- пользователь выдает событие выхода на сервер и также выводит сообщение о том, что его ударили (выход из системы - это только моя реализация наказания).
- пользователь удаляется из списка пользователей чата → издает текущий список пользователей всем пользователям в комнате
Это не кажется слишком сложным, но когда я добавляю все обратные вызовы, которые происходят на стороне клиента для управления пользовательским интерфейсом (поскольку я использую AngularJS, я использую события для связи между контроллерами), а также тонна обратных вызовов на сервер, так как все не блокирует, я нахожу это очень трудным для тестирования.
Там есть еще одна проблема на стороне клиента, где я должен прослушивать события сокета в нескольких местах, поэтому у меня должен быть какой-то один глобальный объект сокета singleton и перехватывать прослушиватели событий в нескольких местах.
Я делаю что-то не так, или этот обратный вызов - результат работы с веб-сайтами без возможности его использования?
Есть ли способы упростить разработку приложений? Например, альтернативные технологии для Socket.io? До сих пор я только нашел NowJS, который имеет последнее завершение 5 месяцев назад, и meteor, что действительно здорово, но, глядя на веб-сайт, он действительно не выглядит стабильным.