Comments 75
Под убунтой ни в хроме ни в ff 6 не заработало
Под дебианом в хроме замечательно заработало.
Хм.
Чую дело в заблокированных портах.
А socket.io по какому порту общается?
Чую дело в заблокированных портах.
А socket.io по какому порту общается?
46.182.31.65:8080
Смотря какой транспорт выбран. XHR и web-sockets по стандартному 80. Флеш вроде по какому-то своему.
А, точно — habrahabr.ru/blogs/nodejs/127525/#comment_4213034 — по 8080. Но в общем случае порт легко настраивается и может быть пущен через 80.
Чудеса
8080 заблокирован
Я удивлен, честно гря. Пойду узнавать, зачем так сделано.
8080 заблокирован
Я удивлен, честно гря. Пойду узнавать, зачем так сделано.
Хьюстон у нас не взлетает :(
kubuntu11.4 fx6 ch12
kubuntu11.4 fx6 ch12
Видимо, хабрэффект накрыл динамику на клиент-сайде.
*сервер-сайде, простите.
эм, так вы засеките при каком максимуме все падает и изза чего — это бесплатное нагрузочное тестирование
под убунтой заработало во всех браузерах установленных.
Тормозит сильно то ли сервер то ли у меня :( Проц под 100%. Последний хром
В общем, пример уже неживой :)
Чат — это видимо самый простой и яркий пример технологии node и веб-сокетов. В то же время это одна из такий фундаментальных и интересных задач для Comet технологий. Наверное в основе многих такий сервисов будет лежать нечто похожее на чат.
Насчет этой реализации сказать ничего не могу, но когда мне понадобилось реализовать чат на nodejs и socket.io быстро удалось найти рабочий пример.
Насчет этой реализации сказать ничего не могу, но когда мне понадобилось реализовать чат на nodejs и socket.io быстро удалось найти рабочий пример.
расскажите впечатления от использования?
То что я делал было не совсем чатом, это небольшая система для стресс тестирования для веб приложения. Socket.io и node.js в этом плане оказались очень удобными. Основа была как у чата: агенты сбрасывают в чат раз в секунду счетчики производительности и данные тестов и получают из чата команды (остановить тест/запустить тест).
Удобно что через тот же самый socket.io я мог работать с чатом как с веб странички (результаты тестов видно в реальном времени) так и с агентов. За счет такого out-of-proc общения через socket.io можно создавать агентов на разных компьютерах или в одном компьютере в разных процессах. Очень легко масштабируется.
Чат не был главной вещью на которую падает нагрузка, основная задача выдавать максимум HTTP запросов для нагрузки серверов.
Удобно что через тот же самый socket.io я мог работать с чатом как с веб странички (результаты тестов видно в реальном времени) так и с агентов. За счет такого out-of-proc общения через socket.io можно создавать агентов на разных компьютерах или в одном компьютере в разных процессах. Очень легко масштабируется.
Чат не был главной вещью на которую падает нагрузка, основная задача выдавать максимум HTTP запросов для нагрузки серверов.
В данном случае меня сподвигла не самая идея чата, а отсутствие внятной документации для Socket.IO. По ссылкам в конце статьи можно найти куски кода, но это больше примеры — в них не обьясняется какая функция что делает. Методом тыка, чтения исходников и вывода в консоль объектов библиотеки я более-менее разобрался, что что делает и делюсь с вами)
Мда, судя по тематике постов в чате, следует сделать функцию автобана)
Можно еще так сделать: используем сервер ejabberd, в качестве сервера обработки сообщений. Клиенты соединяются с ним через прокси-сервер, который проксирует websocket. Такой проксик придется написать самому, т.к. готового решения для ejabberd я не знаю.
В итоге, получим полноценную XMPP = много фич, которые остается реализовать на клиенте.
В итоге, получим полноценную XMPP = много фич, которые остается реализовать на клиенте.
Не нужно делать велосипеды, посмотрите в сторону XMPP-BOSH, ejab умеет этот протокол. Достаточно будет обычного аякса. Если хочется готовых реализаций, то есть github.com/sstrigler/JSJaC, например
Что-то лежит чатик.
Сколько народу сейчас?
Сколько народу сейчас?
А он что русский язык не поддерживает????
Это как?
Это как?
И русский язык поддерживает. Похоже, не у всех, но сейчас человек 5 в чате кириллицей отписались. На странице UTF-8 кодировка, возможно браузер принудительно переопределяет?
UPD. Так, вылезла ошибка — Segmentation fault. Пошел курить мануалы.
UPD. Так, вылезла ошибка — Segmentation fault. Пошел курить мануалы.
поддерживает русский.
А сколько было соединений, очень интересно когда начало тормозить.
В каком режиме работает апачи? Мне кажется что WS он не пробрасывает никак.
И ещё: у вас в примере есть вызов io.sockets.json.send вместе с emit. send — это низкоуровневая функция, не стоит смешивать с emit. Возможно от туда и проблемы с русскими буквами
В каком режиме работает апачи? Мне кажется что WS он не пробрасывает никак.
И ещё: у вас в примере есть вызов io.sockets.json.send вместе с emit. send — это низкоуровневая функция, не стоит смешивать с emit. Возможно от туда и проблемы с русскими буквами
Пардон за навязчивость.
Вот тут однокомнатный чат с поддержкой русского и хабраэффекта — chat.websockets.ru
Вот тут однокомнатный чат с поддержкой русского и хабраэффекта — chat.websockets.ru
Сколько пользователей? Какая нагрузка? На каком железе работает?
UFO just landed and posted this here
Ану быстро предъявили свой чатик!-!-!
С чатика проще всего стартовать, по сути все остальное это то же самое взаимодействие, разве что посылается не просто текст, а текст с форматированием и не всем, а определенным пользователям.
С чатика проще всего стартовать, по сути все остальное это то же самое взаимодействие, разве что посылается не просто текст, а текст с форматированием и не всем, а определенным пользователям.
Собственно, чем не нравится чат? Это основа для всего, любое общение клиента с сервером — обмен пакетами, сейчас обмениваемся текстовыми сообщениями, завтра меняем в коде 10 строчек и привязываем к игрушке/рисовалке/документам/календарю чему там еще…
UFO just landed and posted this here
Потому что конкретно на Socket.IO на хабре еще не было? И да, мне инвайт (куча интересных статей лежит в закрытых блогах, неизвестно почему) и опыт (когда тестируешь сам — в голову не придет спамить пустыми строками каждую секунду), серверу — нагрузочное тестирование, троллям — радость.
Или вы имеете что-то против троллей?
Или вы имеете что-то против троллей?
UFO just landed and posted this here
Сердечное спасибо!)
С точки зрения пользователя — весь интернет это шайтан-машина. Им не нужно знать как это работает, почему, как делалось etc — пользователю главное, чтоб работало.
Когда нет websocket — в ход идет XmlHttpRequest-polling. Не думаю, что что-то сверхсложное. Если любопытно, могу полазить по исходникам, расписать.
С точки зрения пользователя — весь интернет это шайтан-машина. Им не нужно знать как это работает, почему, как делалось etc — пользователю главное, чтоб работало.
Когда нет websocket — в ход идет XmlHttpRequest-polling. Не думаю, что что-то сверхсложное. Если любопытно, могу полазить по исходникам, расписать.
Кол-во соединений/пользователей пока не считал, хотя на тестовом сервере есть. В следующей статье будет. Кстати, на chat.websockets.ru хорошо сделано, может сппозаимствовать идею?..
Железо — тучка от Selectel'а, 32-битный Lycid Lynx Ubuntu, 168-512 оперативки (сейчас 260), 8 ядер.
Апач работает в режиме «apt-get — vim virtualhosts — PROFIT!» — я больше программист нежели администратор) впрочем, все вебсокеты идут на node, с апачем они на разных портах и не пересекаются. emit — в самой программе не используются, т.к. пришлось бы на каждый event писать свой обработчик, я пробовал так делать — куча повторяющегося кода.
Железо — тучка от Selectel'а, 32-битный Lycid Lynx Ubuntu, 168-512 оперативки (сейчас 260), 8 ядер.
Апач работает в режиме «apt-get — vim virtualhosts — PROFIT!» — я больше программист нежели администратор) впрочем, все вебсокеты идут на node, с апачем они на разных портах и не пересекаются. emit — в самой программе не используются, т.к. пришлось бы на каждый event писать свой обработчик, я пробовал так делать — куча повторяющегося кода.
Чатик сломался :(
говорим node.js — подразоумеваем чатик
А можно ли это как-то настроить, чтобы работало на 80-м порту на том же домене?
Приходит в голову или писать веб-сервер на node для отдачи статики (не радует идея что-то), или отдавать статику через nginx и проксировать чат, но он вроде websokets не поддерживает.
Приходит в голову или писать веб-сервер на node для отдачи статики (не радует идея что-то), или отдавать статику через nginx и проксировать чат, но он вроде websokets не поддерживает.
Надо свой чатик выложить, как говорится — других посмотреть, свой померять…
Как только прочитал заголовок статьи, сразу же вспомнил NowJS: чат занимает где-то 5-10 строчек на сервере и примерно столько же на клиенте :)
По факту — nowjs надстройка к socket.io которая типа шарит объект между сервером и клиентом, но как-то у меня с авторизацией лагать начинает на 1000+ юзерах (правда в дев енв), сейчас переписываю на express+socket.io, как-то оно пошустрее на вид получается…
И да now.js + 500 юзеров + около пары сотен сообщений в памяти — ест 180 метров…
И да now.js + 500 юзеров + около пары сотен сообщений в памяти — ест 180 метров…
Меньше кода писать? Возможно. Больше кода в подключаемых библиотеках? Да.
Конечно, можно написать свою высокоуровневую библиотеку, в которой чат вообще будет реализован функцией addChat(). Но надо ли? Я хотел написать на чистом JS — не срослось, Socket.IO — имхо, ближе всего по логике к чистому языку.
Конечно, можно написать свою высокоуровневую библиотеку, в которой чат вообще будет реализован функцией addChat(). Но надо ли? Я хотел написать на чистом JS — не срослось, Socket.IO — имхо, ближе всего по логике к чистому языку.
Вы бы хоть глянули, что там. Что значит «на чистом JS»? А SocketюIO или тот же jQuery — это по вашему не чистый JS? И чем Socket.IO «чище» NowJS? Так бы сразу и написали — «хотел написать свой велосипед».
Пожалуй, я неверно выразился. С минимумом синтаксического сахара. ko.liveModel() — немного не нативная функция. Вы б хоть и мой пост прочитали) И периодически изобретать велосипед таки полезно.
Опять мимо — это не синтаксический сахар. А велосипед изобретать — да полезно, чтобы понять как оно работает внутри. Только в первом абзаце своего поста Вы отказались от изобретения велосипеда. Я бы сказал, что Socket.IO и NowJS позволяют работать на разных уровнях абстракции. Socket.IO — уровень сокетов, NowJS — уровень разделяемых объектов. Можно опуститься еще ниже, но тяжело. Ну а ko.liveModel() на столько же нативная, как io.connect(). ko.liveModel() выводит нас на новый уровень — уровень разделяемой модели, которая привязана к элементам DOM. В результате изменения в DOM одного клиента, автоматически приводят к изменениям у остальных. Я просто хотел обратить внимание на эту технологию.
Наверно, я не смогу передать словами, почему именно Socket.IO, но посмотрите на это:
Websockets:
var socket = new Websocket('http://example.com/');
socket.on('connect', function() {});
socket.on('message', function() {});
Socket.IO:
var socket = new io.socket('http://example.com/'); // до версии 0.7.x
socket.on('connect', function() {});
socket.on('message', function() {});
KnockoutJS + NowJS
var chatRoom = ko.liveModel({
messages: ko.observableArray([]),
send: function() {
chatRoom.messages.push({text: this.text()});
ko.save({ overwrite: true, ignore: [«text»]});
},
text: ko.observable()
}); // и так далее
Websockets:
var socket = new Websocket('http://example.com/');
socket.on('connect', function() {});
socket.on('message', function() {});
Socket.IO:
var socket = new io.socket('http://example.com/'); // до версии 0.7.x
socket.on('connect', function() {});
socket.on('message', function() {});
KnockoutJS + NowJS
var chatRoom = ko.liveModel({
messages: ko.observableArray([]),
send: function() {
chatRoom.messages.push({text: this.text()});
ko.save({ overwrite: true, ignore: [«text»]});
},
text: ko.observable()
}); // и так далее
плохо что не учли самого элементарного касающегося чатов — отправка пустых сообщений.
уже стоит в пачке хотфиксов на сервере и клиенте) здесь только основная логика, без всяких плюшек, проверок и ограничений. думал накатать список в продолжении (судя по реакции аудитории не таком уж и нужном, но дело надо доводить до логического конца...).
а мне бы очень хотелось увидеть продолжение))
чтобы сообщения в redis базе сохранялись например сколько-то последних) чтобы список участников онлайн был с аватарками итд) многие проекты начинали и загнулись. интересно почему? неужели спроса нет?
например тот-же ajax.im aka ajaxim.com и многие другие.
чтобы сообщения в redis базе сохранялись например сколько-то последних) чтобы список участников онлайн был с аватарками итд) многие проекты начинали и загнулись. интересно почему? неужели спроса нет?
например тот-же ajax.im aka ajaxim.com и многие другие.
Статья полезная и актуальная до сих пор, некоторые вещи, конечно не идеальны, НО! Для нормального программиста достаточно, чтобы понять в какую сторону копать и что читать.
Статью рекомендую!
Если кому будет интересно, то готовый чат по этой технологии выложен тут: websocket чат, в качестве примера и начала изучения данной технологии была взята данная статья пару недель назад.
Использую связку: Nginx + Apache + Node.JS (Socket.IO + Forever)
Forever — для подвешивания чата в процессы и управления им.
Статью рекомендую!
Если кому будет интересно, то готовый чат по этой технологии выложен тут: websocket чат, в качестве примера и начала изучения данной технологии была взята данная статья пару недель назад.
Использую связку: Nginx + Apache + Node.JS (Socket.IO + Forever)
Forever — для подвешивания чата в процессы и управления им.
По-моему лучше уже этот вариант)
tutorialzine.com/2014/03/nodejs-private-webchat/
tutorialzine.com/2014/03/nodejs-private-webchat/
Sign up to leave a comment.
Создаем чат на Node.js и Socket.IO