Приветствую, знающие люди подскажите кто знает куда капать
Ситуация такая, есть node.js с socket.io есть сайт и есть андроид приложение.
общение ВЕБ и Андроид. у андроиде есть service на проверку новых сообщений в чате, но он срабатывает не сразу. Вопрос такой как реализовать чтоб когда на ВЕБ клиенте написал сообщение и оно ждало подключение собеседника, соответственно когда собеседник подключился ему пришли те сообщение что не дошли при его отсутствии.
Есть ли какие то стандартные средства или нужно изобретать велосипеды?
да вот не могу понять как бы начать. получаеться мне нужно какую то программу иметь до того как отправлять сообщение клиенту в оффлайне и ждать когда он законектится
Ну вот у меня есть ИД комнаты куда подключаться два собеседника через сокет емит подписываються при коннекте, андроид получаеться подключается позже и веб клиент отправляет в ту комнату когда андроида там нету он ещё не закнектился. А когда конектиться получает только новые сообщения
Значит, перед отправкой в комнату проверьте, подключен ли нужный собеседник. Если да - отправляйте сразу. Если нет, храните во внутреннем массиве, а при on connect нужного - отправляйте.
я понимаю там можно хранить к примеру адресат кому отправляться и при подключении перебрать массив и забрать сообщения если есть. вопрос в другом это переписка диалогов сколько там таких сообщений будет, нагрузка, память сервер рухнет от такого массива нее
памяти пока что 2 гига на тестах пока, в будущем поднимем. сообщений много юзеры между собой будут общаться соц сеть можно сказать, все сообщения будут ограничены конечно и только текстовые
Нечего особо изобретать - сохранять сообщения в базу, и всего делов. При подключении сокета к комнате отправляем ему последние три (допустим) мессаджа из массива мессаджей этой комнаты.
Я уж и попробовал для интересу.
база есть в любом случае. тут еще такой момент буду реализовывать чтоб часть сообщений сохранялись на андроиде т.е. чтоб последние сообщения (скажем 10 последних) были доступны в оффлайне. допустим, как мне узнать последний ид сообщения диалога чтоб проверить от какого ИД мне выгрузить, при том что диалогов может быть несколько и запускается проверка о наличии новых сообщений из под service
думаю тут правильно подсказал Boris Korobkov выше в комментах чтоб хранить массив сообщений во внутреннем массиве на ноде и проверять клиента что он онлайн до отправки сообщения если его нету копим массив, а так как service в случае падения или перезагрузки телефона замет времени не много до его повторного запуска сообщения в массиве будут висеть не долго. ну если только не кончился интернет на телефоне)
Ринат, Да? Ну-ну...
Сокет клиента при каждом подключении получает новый случайный id, и есть этот человек или нету - это его ещё надо идентифицировать как-то. Это ему надо куку отправлять, и чтоб она потом в запросе приходила как connect.sid, и его проверять и т.д. Бог в помощь. Это будет хороший опыт.