1. Как правильно заметили в предыдущем ответе - конструктор не должен быть асинхронным. Вынесите инициализацию в отдельный метод.
2. Почему нельзя подписывать до установления соединения? Кто это сказал? Я не знаю, насчёт используемого вами клиента, но можно же свой Subject (из RxJs) объявить, на него подписаться, а он уже будет прокидывать события из сокета, когда соединение установится. Т.е. на события сокета подписывается только сервис, который его создал, после того, как соединение будет установлено. Все остальные подписываются на события этого сервиса. Сервис пробрасывает все события, которые приходят от сокета, своим подписчикам.