Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   На чем лучше писать online javascript шахматы (https://javascript.ru/forum/server/27795-na-chem-luchshe-pisat-online-javascript-shakhmaty.html)

bombascter 25.04.2012 09:44

На чем лучше писать online javascript шахматы
 
Всем доброе время суток! Хочу написать свой шахматный портал на javascript, и хотел спросить у специалистов. На каком языке лучше всего писать серверную часть обмена данными (передача ходов), ajax не подходит. Нужно что-бы обмен данными происходил почти мгновенно, но при этом не обновлять каждый определенный промежуток времени браузер, в поиске пришедших данных. Читал о сокетах, наверное не самое лучшее решение ? Еще нужно что-бы другие игроки имели возможность наблюдать за игрой. Сам клиент, почти написан на javascript. Знаю только php js. Думаю, что наверное прийдеться изучать Java? Возможно есть какое-то интересное решение? Подскажи пожалуйста, кто знает ?

Diego 25.04.2012 14:23

Советую node.js(серверный js) + http://socket.io/ Ничего дополнительно учить не надо, единственное, придется помучатся с изучением асинхронного программирования на сервере.
Суть nodejs в том, что он позволяет не постоянно работать скрипту и проверять состояние игры каждый момент, а реагировать только на определенные события, тем самым позволяет создавать мультиплееры на сколько угодно игроков, и особой нагрузки такой код на сервере не вызовет.

Из недостатков - пока что nodejs не так популярен как php, соответственно и хостингов с этой технологией намного меньше.

Kolyaj 25.04.2012 14:48

Цитата:

Сообщение от Diego
Ничего дополнительно учить не надо

Цитата:

Сообщение от Diego
придется помучатся с изучением асинхронного программирования на сервере

Взаимоисключающие предложения.


Цитата:

Сообщение от Diego
Из недостатков - пока что nodejs не так популярен как php, соответственно и хостингов с этой технологией намного меньше.

Любой VPS, они не сильно дороже виртуальных хостингов.

Diego 25.04.2012 15:07

Цитата:

Сообщение от Kolyaj (Сообщение 171184)
Взаимоисключающие предложения.

я имел ввиду языки программирования. JS он и на сервере js :)
Имхо, выучить новый стиль программирования намного легче чем новый язык с его особенностями и функциями.

trikadin 25.04.2012 15:58

Diego, боюсь, помучаться придётся не только с "изучением асинхронного программирования на сервере". Ещё нода имеет привычку падать от малейшей ошибки, жрать память, и т.д.

bombascter, почему, кстати, ajax не подходит? Если вас даже сокеты не смущают, значит, дело не в кроссбраузерности. А в чём тогда?

Kolyaj 25.04.2012 16:49

Цитата:

Сообщение от trikadin
Ещё нода имеет привычку падать от малейшей ошибки

За больше года в продакшне ни разу не упала.

Цитата:

Сообщение от trikadin
жрать память

Какое-то время наблюдал за потребляемой памятью, потом забил, т.к. она не росла в течение нескольких месяцев.

Цитата:

Сообщение от trikadin
и т.д.

?

Kolyaj 25.04.2012 16:51

Про падение от ошибок: что-то мне подсказывает, что никто не читает документацию, т.к. часто это заблуждение вижу.
http://nodejs.org/api/process.html#p...aughtexception

trikadin 25.04.2012 16:59

Kolyaj, да, я думаю, у вас не падает. Но что-то мне подсказывает, что такой уровень профессионализма не везде. Например, я не имел в виду, что нода жрёт память сама по себе, я имел в виду, что легко допустить, чтобы нода начала жрать память. То же самое и с ошибками, например, ссылка на эту вещь в документации стала открытием и для меня.

Мой пост ставил целью подчеркнуть то, что учиться придётся не только асинхронному программированию.

Kolyaj 25.04.2012 17:12

Цитата:

Сообщение от trikadin
я имел в виду, что легко допустить, чтобы нода начала жрать память.

Ну так в любом языке/фреймворке можно это легко допустить. PHP спасает только то, что там процесс умирает сразу.


Цитата:

Сообщение от trikadin
Мой пост ставил целью подчеркнуть то, что учиться придётся не только асинхронному программированию.

С этим я согласен. Ещё придётся учиться работать в серверном, а не браузерном, окружении. Язык только верхушка айсберга.

trikadin 25.04.2012 17:18

Цитата:

Сообщение от Kolyaj
Ну так в любом языке/фреймворке можно это легко допустить. PHP спасает только то, что там процесс умирает сразу.

Примерно то же происходит и со страничками в вебе, поэтому JS-ники, которые пишут на клиенте, часто не задумываются об утечках памяти.

Цитата:

Сообщение от Kolyaj
С этим я согласен. Ещё придётся учиться работать в серверном, а не браузерном, окружении. Язык только верхушка айсберга.

Кстати, а какой сервер вы используете? nginx?

Kolyaj 25.04.2012 17:27

Цитата:

Сообщение от trikadin
Кстати, а какой сервер вы используете? nginx?

Нода сама себе сервер, какой-то ещё сервер в общем случае не нужен. Но у меня перед ней стоит nginx, чтобы
1. Чтобы раздавать статику nginx-ом.
2. Чтобы держать на одном виртуальном сервере несколько сайтов. nginx раскидывает на разные порты запросы к разным хостам.

trikadin 25.04.2012 17:31

Цитата:

Сообщение от Kolyaj
1. Чтобы раздавать статику nginx-ом.

Эм, это файлы, в смысле?) Ну, те, которые не нужно менять нодой?)

Kolyaj 25.04.2012 17:38

Картинки, стили, клиентские скрипты.

trikadin 25.04.2012 17:44

Цитата:

Сообщение от Kolyaj
Картинки, стили, клиентские скрипты.

Да, понял. Если не секрет - какая конфигурация сервера и нагрузки на него?

Kolyaj 25.04.2012 17:59

VDS за 150 рублей в месяц, 64 МБ оперативы, процессор не помню, в него не жмёт.
~50000 хитов в день, запросов к ноде, соответственно, примерно столько же, т.к. статика отдаётся nginx-ом.

Gozar 25.04.2012 21:18

Цитата:

Сообщение от trikadin
Примерно то же происходит и со страничками в вебе, поэтому JS-ники, которые пишут на клиенте, часто не задумываются об утечках памяти.

Эм, это наверное только те, которые не пишут приложения. Те, кто пишут приложения, работающие долгое время, просто не могут не задумываться, они вынуждены.

trikadin 25.04.2012 21:21

Цитата:

Сообщение от Gozar
Эм, это наверное только те, которые не пишут приложения. Те, кто пишут приложения, работающие долгое время, просто не могут не задумываться, они вынуждены.

Таких (которые пишут приложения) больше, имхо) А ещё есть те, кто забивает.

Gozar 25.04.2012 21:27

Цитата:

Сообщение от trikadin
А ещё есть те, кто забивает.

А что можно забить на то, что память будет съедена и браузер упадет? :)

trikadin 25.04.2012 21:36

Цитата:

Сообщение от Gozar
А что можно забить на то, что память будет съедена и браузер упадет?

Можно. Контакт, например, с успехом это делает.

Gozar 26.04.2012 09:33

Цитата:

Сообщение от bombascter (Сообщение 171144)
На каком языке лучше всего писать серверную часть обмена данными (передача ходов), ajax не подходит.

Мне вот интересно коим местом ajax связан с тем, на каком языке лучше писать серверную часть? ajax по большей части браузерная часть. Серверная часть не зависит от того, будете вы отправлять данные из браузера ajax или через почтальона. Хочешь пиши серверную часть на Erlang, xочешь на PHP, хочешь на nodejs, хочешь на java.

Цитата:

Сообщение от bombascter (Сообщение 171144)
Читал о сокетах, наверное не самое лучшее решение ?

Можно поинтересоваться почему сокеты придуманные для мгновенного обмена информации между сервером и браузером, для чатов и прочего не самое лучшее решение?

Что тогда самое лучшее решение если не сокеты, заглушки из флеша?

Мне кажется или ты плохо знаком с предметной областью? Потому что если это так, то возможно не стоит категорически отказываться от технологии, даже не понимая как она работает и для чего она придумана. Лучшим решением будет сначала изучить технологии, а затем уже говорить что что-то не подходит по той или другой причине, но причина должна быть обоснована. Например сокеты не поддерживаются IE7, а ты решил писать шахматы только для IE7.

trikadin 26.04.2012 09:42

Цитата:

Сообщение от Gozar
через почтальона.

Поднять SMTP-сервер и через mailto :)

Почему-то на аякс нацеплен ярлык чего-то адово сложного. Хотя, может, оно и к лучшему - полные идиоты к нему не лезут.

Kolyaj 26.04.2012 12:17

Цитата:

Сообщение от trikadin
Поднять SMTP-сервер и через mailto

"Чтобы сделать ход, отправьте письмо с темой e2-e4 на адрес ..."

Цитата:

Сообщение от trikadin
Почему-то на аякс нацеплен ярлык чего-то адово сложного.

На аякс куча ярлыков навешано, каждый под этим термином понимает что-то своё. Да и сам термин невразумительный.

trikadin 26.04.2012 12:27

Цитата:

Сообщение от Kolyaj
"Чтобы сделать ход, отправьте письмо с темой e2-e4 на адрес ..."

Не, ну тогда уж надо почтой россии. Для кошерности)

bombascter 27.04.2012 13:21

Цитата:

Сообщение от Gozar (Сообщение 171369)
Мне вот интересно коим местом ajax связан с тем, на каком языке лучше писать серверную часть? ajax по большей части браузерная часть. Серверная часть не зависит от того, будете вы отправлять данные из браузера ajax или через почтальона. Хочешь пиши серверную часть на Erlang, xочешь на PHP, хочешь на nodejs, хочешь на java.


Можно поинтересоваться почему сокеты придуманные для мгновенного обмена информации между сервером и браузером, для чатов и прочего не самое лучшее решение?

Что тогда самое лучшее решение если не сокеты, заглушки из флеша?

Мне кажется или ты плохо знаком с предметной областью? Потому что если это так, то возможно не стоит категорически отказываться от технологии, даже не понимая как она работает и для чего она придумана. Лучшим решением будет сначала изучить технологии, а затем уже говорить что что-то не подходит по той или другой причине, но причина должна быть обоснована. Например сокеты не поддерживаются IE7, а ты решил писать шахматы только для IE7.

Всем спасибо за ответы. Действительно в Java я совсем не знаю. Ajax никогда не использовал. Ajax не подходит, пот почему: Например пользователь сделал ход, он передается на сервер записывается в бд, но как мгновенно передать этот ход второму пользователю, который ожидает хода? На сколько я знаю, второй пользователь, который ждет хода, должен определенный промежуток времени отсылать запросы на сервер с вопросом нет ли полученного хода. Делать такой запрос каждую секунду - это большая нагрузка на сервер. А хода, бывают, делаются намного быстрее чем за секунду! здесь нужно, почти мгновенная передача данных. Почему я простив сокетов? - Потому, что никогда не имел дела с ними. И не уверен что они могут решить данную задачу. Поэтому я и написал, может кто сталкивался с данной проблемой и знает самое приятное решение. Хотелось бы, что-бы все работало правильно и не переделывать по 100 раз. Ради портала готов изучить не только сокеты, но и Java если так будет правильнее сделать) очень приятно, что вас заинтересовала данная тема))

bombascter 27.04.2012 13:22

Наверное, я так понял лучше сделать на сокетах, да ?

bombascter 27.04.2012 13:23

Кто знает какую систему использует chess.com ?

Kolyaj 27.04.2012 16:21

Цитата:

Сообщение от bombascter
Делать такой запрос каждую секунду - это большая нагрузка на сервер.

http://javascript.ru/ajax/comet/long-poll

bombascter 27.04.2012 22:37

Цитата:

Сообщение от Kolyaj (Сообщение 171590)

Спасибо, вот нашел http://habrahabr.ru/post/41223/

bombascter 27.04.2012 22:43

COMET-приложение имеет другой режим функционирования, принципиально отличающийся от обычной генерации страницы.

Принять запрос (посетитель подключился к чату)
Ждать, пока появится сообщение
Получив сообщение, сгенерировать на его основе ответ
Выдать ответ
(Зависит от реализации) Закрыть соединение
Как правило, большую часть времени соединение висит в ожидании события. При этом выделенный процесс или даже поток на такое соединение - колоссальный перерасход ресурсов, прежде всего - памяти.

Одновременно подключенные к серверу 100 человек при классическом подходе дали бы 100 процессов(или потоков), большая часть которых будет висеть и ждать сообщения. Это достаточно большие затраты памяти, да и процессорное время тоже тратится, хотя и не в такой степени.

Проблема становится очевиднее при цифрах в 1000, 10.000 соединений, которые вполне достижимы в проектах, рассчитанных на большое количество одновременных пользователей: чаты, онлайн-игры, сайты знакомств и др.

Существует много COMET-серверов, но все они основаны на всего нескольких паттернах преодоления этой проблемы.

trikadin 27.04.2012 23:12

Use Node, be happy.

Kolyaj 27.04.2012 23:30

bombascter,
вы, наверное, этой цитатой сказать что-то хотели? Что?

bombascter 27.04.2012 23:45

Цитата:

Сообщение от trikadin (Сообщение 171659)
Use Node, be happy.

Node.js ?

bombascter 27.04.2012 23:46

Цитата:

Сообщение от Kolyaj (Сообщение 171663)
bombascter,
вы, наверное, этой цитатой сказать что-то хотели? Что?

Что при многочисленных соединениях большие затраты памяти

Kolyaj 27.04.2012 23:47

Это если на PHP писать. А если на Node.js, например, как сказали выше, то не будет больших затрат.

bombascter 27.04.2012 23:49

Comet, наверное, самое подходящее решение. Буду пробовать. Спасибо всем за советы!

bombascter 27.04.2012 23:50

Цитата:

Сообщение от Kolyaj (Сообщение 171671)
Это если на PHP писать. А если на Node.js, например, как сказали выше, то не будет больших затрат.

Все-таки хотелось бы на php...
Хотя, новые технологии тоже нужно изучать. Может правильнее вообще не Java написать?

Kolyaj 27.04.2012 23:52

Цитата:

Сообщение от bombascter
Все-таки хотелось бы на php...

Тогда вот можно попробовать http://dklab.ru/lib/dklab_realplexor/

bombascter 27.04.2012 23:55

Цитата:

Сообщение от Kolyaj (Сообщение 171675)
Тогда вот можно попробовать http://dklab.ru/lib/dklab_realplexor/

Во))) Огромное спасибо за ссылку )

bombascter 28.04.2012 09:43

Кому интересно вот, хорошая статья о "http://dklab.ru/lib/dklab_realplexor/" - http://www.xakep.ru/post/52189/?print=true


Часовой пояс GMT +3, время: 15:09.