Как организовать общение между Python и Javascript?
Здравствуйте, я начинающий веб-программист с небольшим стажем, я начал писать проект, анонимный чат на веб-сокетах.
Я выбрал JavaScript как клиентскую часть, а Python как серверную. И вот настал период проблем. Я никак не могу уже достаточное время, реализовать общение между сервером и чатом, т.е. чат уже есть, он работает полноценно... Приведу пример. У меня в чате, есть демонстрация онлайн выводом сообщения, т.е. кто-то зашёл пишет 'онлайн 2' , кто-то вышел 'онлайн 1', но вы сами подумайте... При онлайне допустим 200,каждую миллисекунду будет флудить в чат онлайн? И вот я решил сделать общение. И настал новый период, период вопросов. И теперь прошу помощи у тостера :3
Я забыл описать проблему. Мне нужно чтобы с сервера возвращалась переменная с онлайном.
У меня есть переменная, с которой я вывожу в виде сообщения, но мне надо вывести эту переменную в JavaScript, а потом вывести не в чат, а в поле, любое.
Вот ссылка на чат 5.101.115.43 ( Не реклама )
Почему-то создаётся впечатление, что у вас проблема не с технологиями, а с самыми-самыми основами - с алгоритмами. Впрочем, не только у вас. Питон - это не волшебная палочка, которая решит все проблемы. "Как сделать лайки?". "У меня есть список комментариев, как вывести их количество?".
У вас есть данные, которые получает скрипт, отвечающий за общение. Ваше дело, куда эти данные вывести - хоть в поле, любое. У вас УЖЕ ЕСТЬ ДАННЫЕ, какие с ними сложности?
Боюсь или вы меня не поняли, или я вас... Я могу вывести онлайн через сервер в виде сообщения, но надо отправить переменную клиенту, А потом через клиента вывести, вот и обратился к вам. Это получится с json?
Да, пожалуй, вопрос не понял именно я. Насколько я знаю, через вебсокеты клиент соединяется с сервером изолированным потоком данных, вы можете из него читать (иначе бы не смогли получить сообщение от клиента) и в него же писать. Э... И?
CanVeeD , в вы питоньем скрипте читаете сообщение из вебсокета. Вы можете отправлять туда же сообщение. Сможете прочитать сообщение в JS-скрипте на клиенте?
CanVeeD , да, тогда лучше всего действительно использовать json. В JS-скрипте вам нужно принять данные от сервера и сделать JSON.parse полученной строки. Вообще, наверное, лучше было изначально с json работать, удобно же до ужаса. А тут с чем проблема?
Tark: да, я превратил переменную с онлайном на сервере и отправил в же сообщения, А вот как же принять, уже проблема, если отправлять виде сообщения с сервера, то он начинает флудить, проверьте сами, сайт чата в вопросе.. Надеюсь на помощь от вас)
М... Возможно, вы не обновили скрипты на сервере) Но ведь не обязательно слать данные каждый раз? Можно отсылать что-то типа {"system": "Тел в чате: 666"} только при изменении людей онлайн, а сообщение в чат слать {"chat": "сообщение"} и проверять состояние как-нибудь типа if(answer.system !== 'undefined') ... else if(answer.chat !== 'undefined') ...
Tark: я понял вас, но дело в том, что он пишет в чат каков онлайн, каждый раз, когда кто-то зашёл - вышел... Т.е., я захожу пишет Онлайн 1, заходите вы, пишет Онлайн 2, выхожу я, пишет Онлайн 1 и таким образом флудит в чат, я вот хочу сделать отдельную надпись 'Онлайн:' + online.. Т.е. в переменную online вставить онлайн сервера... Вот в чём проблема и ещё, можно ваши контактные данные? Скайп, если есть.. Если нет, то ничего
Tark: и то есть отправить сообщение с Json клиенту и просто принять его $('#users_amount').text(answer.users_amount);
Где answer.usets_amount Json переменная переданная с сервера? Вот например я передал переменную Json с названием online то у нас будет$('#users_amount').text(online);?
Да, примерно так. Не забудьте, что принятые данные - это "строка", её нужно перевести в JSON Object с помощью конструкции answer = JSON.parse(ваша строка с json); И не совсем так - $('#users_amount').text(online); - если переменная online это json, то это... как обьект. Если вы шлёте данные вида {"users_amount": 10}, то чтобы получить число 10, надо сделать online = JSON.parse('{"users_amount": 10}'); и $('#users_amount').text(online.users_amount);
Tark: Здравствуйте, у меня снова ошибка... Я написал в клиенте
online = JSON.parse('{"users_amount": 2}');
$('#users_amount').text(online.users_amount);
И
self.sendToAll(json.dumps({"user_amount": 2}))
На сервере, но он не смотрит на сервер... Он читает
online = JSON.parse('{"users_amount": 2}');
Как можно принять данные с сервера?
У вас есть функция showServerResponse, там принимается ответ от серевера в переменную txt. Её нужно разобрать, online = JSON.parse(txt); Теперь все сообщения придётся слать json'ом, не забудьте. И нужно проверить if(online.user_amount !== 'undefined') { // если сервер послал не сообщение от другого пользователя, а выдал изменение количества пользователей, ...}
Tark: и снова я ( Я сделал как вы сказали, добавил txt, но мне пишет txt not defined и да, ещё как засунуть в джосон переменную? Т.е. у меня на сервере в переменной online - онлайн , буду надеяться на вас)