Навигация по сайту

Популярные статьи

Стварэнне гульні для сацыяльных сетак Разумнік

Распрацоўка гульняў для сацыяльных сетак з'яўляецца досыць вялікай цікавасцю для распрацоўнікаў. У першую чаргу гэта звязана з тым, што сацыяльныя сеткі маюць ужо велізарную аўдыторыю карыстальнікаў.

Часцей за ўсё гульні ў сацыяльных прадстаўлены як Flash кантэйнер або праз iframe. Калі раней вялікая частка гульняў была на Flash, то дзякуючы тэхналогіях якія сёння дае вэб ўжо можна пісаць шматкарыстальніцкія і анімацыйныя гульні.

Вось і ў адзін з вечароў я вырашыў паспрабаваць напісаць сваю гульню і паглядзець на якіх тэхналогіях гэта можна зрабіць. Мая гульня Вконтакте http://vk.com/app4533532 . А далей невялікае апісанне.

Я ўжо даўно хацеў паспрабаваць магчымасці node.js і WebSockets таму гульню было вырашана пісаць толькі шматкарыстальніцкую. Хоць першапачаткова, я думаў паспрабаваць выкарыстоўваць php, але так як ужо даўно на ім не праграмуецца, то адкінуў гэтую ідэю. Плюс пра Асінхроннасьць node.js і сокетаў чуў вельмі шмат добрага.

Ідэя гульні, як і назва, прыйшлі ў галаву досыць хутка «Разумнік! Гуляй з сябрамі «. Гульня ўяўляе сабой аналаг гульні «Хто хоча стаць мільянерам?» Або «О, шчасліўчык», толькі ў мяне адзін гулец супернічае з іншым. Мэта гульні-адказаць на большую колькасць пытанняў чым ваш супернік. Само сабой падказкі мне прыйшлося прыдумаць іншыя, а не як у ТБ шоў.

Для гульні былі абраныя наступныя тэхналогіі. Як я ўжо пісаў node.js + бібліятэка socket.io якая дазваляе выкарыстоўваць розныя тыпы падлучэння для сокетных злучэнняў. Гэта была серверная бок, то ёсць логіка якая адказвае за гульнявы ​​працэс. Акрамя таго я выкарыстаў Silex фреймворк на php для стварэння API. Чаму я ўсё не зрабіў на node.js? Адказ просты. Ёсць запыты па тыпу атрымання рэйтынгу, ўваходу ў гульню, працэс аплаты ў гульні, якія прасцей зрабіць на php, ды і абнаўленне php прасцей. Калі ж абнаўляць код на node.js, то прыйдзецца перазапусьціць гульню і ўсе кліенты адключацца ад гульні. Таму неігравыя працэсы я вынес на плечы php.

У якасці Базы Дадзеных спачатку хацеў скарыстаць Mongo, але потым усё ж вырашыў, што MySQL хопіць. Усе дадзеныя ў мяне структураваныя, ды і з гэтай БД я ўжо даўно працую. Для сувязі node.js з MySQL была выкарыстаная бібліятэка node-mysql .

Для кліенцкай частцы я выкарыстоўваю marionette , require.js , backbone , Jquery. Для зборкі праекта grunt.js і less препроцессор.

Першапачаткова гульню планавалася размясціць толькі ў «Вконтакте», але пасля запуску давялося дапісваць код для «Аднакласнікаў». Для абедзвюх соц. сетак выкарыстоўваецца адзін і той жа код. Падзел адбываецца на ўзроўні дамена. У залежнасці ад хаста загружаюцца апрацоўшчыкі вконтаке або Аднакласнікаў. Дзякуючы фреймворка логіка і прадстаўлення вельмі добра падзеленыя. Даданне новай соцсеть не зойме шмат часу.

На стварэнне гульні сышло прыкладна 1 месяц вольнага часу. Першыя пытанні даставаліся са старых гульняў знойдзеных на прасторах Інтэрнэту. Дзе-то прыйшлося знаходзіць алгарытм якімі некаторыя распрацоўшчыкі шыфравалі пытанні. Зрэшты, як аказалася, многія з іх былі з нявернымі адказамі, з граматычнымі памылкамі. На ўсё гэта скардзіліся карыстальнікі.

Пасля дадання гульні ў Вконтакте - адправіў яе на мадэрацыю. Першая спроба мадэрацыя была праз хвілін 30 пасля адпраўкі. Адмовілі ў размяшчэнні. Для гульні неабходна было 2 чалавекі мінімум. На жаль правяральны чалавек быў адзін і адхіліў гульню з прычыны "Заўсёды ідзе пошук суперніка». Гэта быў мой першы вушак пасля якога я зразумеў, што трэба адразу пісаць ботаў для гульні. Нават многія, хто заходзіў у гульню па спасылках у твітар адразу ж сыходзілі бо нікога не было.

Пасля напісання ботаў адправіў гульню на мадэрацыю другі раз. У гэты раз прыйшлося чакаць аж 4 дня. Нават накатаў ліст у падтрымку. Пасля гэтага гульню размясцілі ў каталогу. Але ўсё роўна гульцоў было мала. Амаль заўсёды ўсё гулялі з ботамі. Але! у «Вконтакте» ёсць цікавая фішка. Яны могуць за бясплатна размясціць гульню ў блоку «Новыя». Гульняў досыць шмат, таму мой рэліз у гэтым блоку быў 20го кастрычніка. Да 20го колькасці ў гульні было ўсяго каля 100 чалавек ... Але прачнуўшыся раніцай 20го ліку ... я быў у шоку. У анлайне было 300 чалавек. Мой сервер з 1.5Гб АЗП проста не спраўляўся з такой нагрузкай. Гульня стала перазагружацца. Шчыра - я не быў гатовы да такой нагрузцы.

Карыстальнікі скардзіліся. Валіліся памылкі. У гэты ж дзень было выпраўлена мноства памылак. Нейкім чынам ў водную гульню замест двух чалавек трапляла трое. Я доўга не мог зразумець чаму. Аказалася, што я забыўся павесіць індэкс на адно з палёў у БД. З-за гэтага адначасова 2 карыстальніка знаходзілі адкрытую гульню і падлучаліся да яе да таго моманту калі яе статус у БД мяняўся з «open» на «playing». У наступстве прыйшлося яшчэ мацней аптымізаваць гэта «вузкае» месца.

Пасля выпраўлення багаў давялося закупляць новы сервер ўжо з 4ГБ АЗП. Добра, што ён быў па тым жа кошце, што і мой бягучы сервер набыты ў мінулым годзе. На 3 дзень пасля запуску, у ноч я перанёс усе файлы. Да шкадавання перанос DNS быў не настолькі хуткім і я страціў вялікую колькасць гульцоў. Гэта відаць з наступнага графіка:

Крыўдна, але трэба было быць гатовым да гэтага адразу. Зрэшты цяпер сітуацыя дастаткова стабільная. Усе бачныя на першы погляд багі папраўлюся. Пачынаем паціху дадаваць новыя фічы.

Першым, што прыйшлося зрабіць - магчымасць дадання новых пытанняў карыстальнікамі. Другім - адзначаць якія пытанні з памылкамі ці не. Гэта рэалізаваў з дапамогай «лайкаў» і «дислайков» пытанняў. У цэлым - зараз з памылкамі знаходзіць пытанні прасцей.

Акрамя гульні прыйшлося развіваць групу - у гэтым месцы гульцы паведамлялі аб багах і няверных пытаннях. Гэтак жа там ідзе прасоўванне гульні: конкурсы, пытанні і да т.п.

Акрамя гульні запусціў крама сувеніраў http://umnikclub.printdirect.ru/ . Наколькі гэта будзе прыносіць прыбытак-пакуль не ясна. Можна будзе зразумець толькі праз месяц-другі.

Якія яшчэ планы па гульні? 1. Запуск у аднакласніках (чакаю афармлення ІП. Без юр. Асобы не запускаюць гульню) 2. Паспрабаваць магчымасці фэйсбук. 3. Партаванне на мабільныя платформы.

На ўсё гэта патрэбны час, вядома, а яго часам вельмі не хапае. Па магчымасці буду рэалізаваць.

Якія высновы я зрабіў для сябе?

1. Для гульні патрэбна добрая і правільная манетызацыя. У мяне выйшла не вельмі. Падказкі асабліва ніхто не купляе.

2. Неабходна мець магутнае жалеза, інакш наплыў гульцоў пакладзе гульню. Вынік-страта гульцоў.

3. Адкрыццё юр.лица і афармленне дагавораў. Без гэтага «галасы» з кантакту і «Ок» з Аднакласнікаў ўжо не выведзены.

4. Развіваць групу трэба адразу ж разам з дадаткам. Я выпусціў крыху гэты крок. Спасылка на групу павінна быць у дадатку. І лепш - на бачным месцы.

5. Тэставанне на «вузкія» месцы. Без іх можна атрымаць шмат «загадкавых» багаў.

6. У шматкарыстальніцкіх гульнях трэба адразу прадумваць ботаў. Першы час без іх нікуды. Патрэбныя хаця б самыя прымітыўныя.

Зараз гульню ўсталявала каля 60 000 чалавек. У сярэднім у онлайн бывае 100-150 чалавек. Сервак сябе адчувае выдатна. Гульня знаходзіцца на 684 месцы ў рэйтынгу самых папулярных прыкладанняў. У гульні часам з'яўляюцца невялікія багі-стараюся іх знаходзіць.

Усім ўдалай гульні! Калі ў вас ёсць нейкія пытанні-задавайце ў каментарах.

Гульня ўяўляе сабой аналаг гульні «Хто хоча стаць мільянерам?
Js?
Якія яшчэ планы па гульні?
Якія высновы я зрабіў для сябе?