Помощник
|
Как сделать свой сервер для игр бесплатно |
k0ttee
|
Сообщение
#1
|
||
|
|
||
|
|||
Dotatin |
18.1.2016, 10:35;
Ответить: Dotatin
Сообщение
#2
|
|
А что мешает напрямую создать сервер? Та же самая контра или дота прекрасно создаются прямо из игры.
|
|
|
k0ttee
|
Сообщение
#3
|
|
прямо из игры Таки не везде такая реализация. Таки можно создать кухонный майнкрафт-сервер и барыжить им. Таки можно сделать вообще любой сервер, не только игровой но и VPN и проксить друг-друга для кликов по рекламе. Короче возможностей целый вагон, но 99.9% пуканов воспламеняются именно от игр... вот в эту сторону и пришлось сделать уклон. Фан в инструменте и угаре от написания шапки. -------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
SilverSurfer |
12.1.2017, 23:22;
Ответить: SilverSurfer
Сообщение
#4
|
|
Добрый день
У меня вовсю уже бомбит - разрабатываю (программирую) клиент-серверную онлайн-игру Пока, сервер её будет на моём домашнем компе Развернул ngrok на нём Теперь нужен ваш совет Какой именно веб-сервер поставить на свой домашний комп? - из той же серии, простой, лёгкий, понятный даже дебилу. И чтобы он легко дружил с прогой-сервером игры. Игра ККИ, пошаговая, передаваемые объёмы данных просто смешно малы Заранее спасибо. |
|
|
k0ttee
|
Сообщение
#5
|
|
Какой именно веб-сервер поставить на свой домашний комп? - из той же серии, простой, лёгкий, понятный даже дебилу. И чтобы он легко дружил с прогой-сервером игры. Я бы поставил NGINX и соединил с серверной частью игры сокетом. -------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
SilverSurfer |
13.1.2017, 17:18;
Ответить: SilverSurfer
Сообщение
#6
|
|
Я вот думаю - а может, и не нужен никакой веб-сервер? Что если в самом сервере игры, прописать работу с сокетами?
|
|
|
k0ttee
|
Сообщение
#7
|
|
Ngrok делает туннель, чтобы домашний комп смог быть сервером (несмотря на закрытые порты у провайдера).
Если игра представляет собой сайт, на который заходят с браузеров - сойдет любой denwer на localhost. -------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
SilverSurfer |
13.1.2017, 23:55;
Ответить: SilverSurfer
Сообщение
#8
|
|
Нет, игра представляет собой браузерный клиент (на JavaScript HTML5 Canvas), который обменивается данными с сервером игры (который всё обсчитывает)
Игрок открывает клиент (не с моего домашнего компа), а дальше этот клиент должен обмениваться данными с сервером (программой) который стоит на моём домашнем компе Добавлено спустя 6 часов 28 минут 54 секунды: Кароче (умудрился уже опытом) отвечаю сам же на свой же вопрос: Для тех у кого бомбит писать свою собственную онлайн-игру, а (нихрена) навыков в веб-программировании нету, а 3 дня кряду самостоятельно рыть инет (как сейчас делал я) не хоца, то: 1. Качается эта прога: Node ("recommended" версия там). Инсталится на свой домашний комп. Это сразу (2-в-1 одном флаконе) - и прога-сервер-игры (кодинг программного кода сервера игры, проводится на языке JavaScript - после чего, сохраняется в файл sr.js - после чего, подсовывается в командной строке на вход этой проге при её запуске) - и она же также и веб-сервер сама (на этот веб-сервер - на неё - потом можно будет заходить из инета браузером) 2. Курс молодого бойца по этой проге: 3. На компе создаётся папочка, в которой будет писаться игра. (и сервер-игры и клиент-игры) 4. В эту папочку, кладётся тот файл sr.js (в котором будет писаться код сервера игры - писаться например открыв этот файл, блокнотом) 5. Внутри этой папочки, создаётся подпапочка "public" - в ней будет лежать клиент игры: 2 файла - index.html (веб-страница которая даётся в браузер подключившемуся клиенту), и cl.js (программный код клиента игры - тобиш, программный код самой этой вебстраницы, который исполняет браузер клиента на стороне компа клиента - код этот программный, он писаемый тоже на языке JavaScript, тоже открывая этот файл например ноутпадом) 6. Если 2-5 это показалось слишком сложно на восприятие - качается например этот готовый работающий пример 7. Кодим клиент-серверный обмен (игра в пинг-понг сообщениями туда-сюда), с помощью веб-сокетов (вебсокетов, websockets). Именно вебсокетов, а не чего-то ещё. 8. Как кодить 7 - видно в том готовом работающем примере из 6. 9. Запуск в небо: 10. Открывается командная консоль (cmd). 11. В ней идётся (с помощью команд cd) внутрь той папочки где лежит файл sr.js ( файл программы сервера игры) 12. После того как пришли в ту папочку, набираем команду: node sr.js. И жмём Enter. 13. Ура, сервер игры (он же, и веб-сервер по совместительству) - запущен, работает. 14. Открываем на своём компе браузер, и в адресную строку вводим там: localhost:3000 (вместо "3000" - номер порта который прописан в файле sr.js - проге-сервере-игры) 15. Если всё сделано верно, наслаждаемся как в браузере появилось сообщение от сервера игры. 16. А если в sr.js уже прописана и выдача клиенту клиентской веб-страницы (которая лежит в той папке "public") - то наслаждаемся тем как на эту веб-страницу зашлось в браузере. 17. Гордо показаться нашему новоиспечённому серваку игры (вебсерверу) на просторах инета, поможет прога ngrok. 18. Друк открывает у себя дома браузер, заходит им на адрес вашего компа (который написано в ngrok) указав после этого адреса через двоеточие (":") ту цифирь "3000" (или какой порт прописан в sr.js, и есно цифирь в адресной строке браузера дописывается без кавычек) - и - о чудо! - он зашёл браузером этим своим на вебстраницу клиента вашей игры. 19. Всё программирование - и клиента игры, и сервера игры - производится исключительно на языке JavaScript (не перегружая тыкву сто500 разными языками программирования) 20. Онлайново проверить свой JavaScript-код на синтаксическую корректность: здесь (копипастить туда из ноутпада - если надпись там внизу не стала зелёненькой, а красненькая, значит ищи ошибку, по подсказкам там справа - скобочка, точка с запятой, и т.п. упущения - без исправления всех упущений, данный код просто не заработает) (можно также кодить в среде разработки вроде Eclipse Jee Neon, но не рекомендуется до достижения "высот" перегружать ею свою тыкву) 21. P.S. (для адванседов, уже): если при кодинге потребуется установка доп.библиотек которые есть у node, делается это "кошерным" заходом в папку игры (консолью cmd, пп.10-11), и выполнением там следующей команды: npm install <имя_этой_библиотки> --save (без угловых скобок, и с обязательной припиской --save, ну и не забыть написав команду нажать Enter)) P.P.S. Сам рыл всё это, дня 3 :beach: P.P.P.S. Для более серьёзных разработок, конечно же мировая индустрия юзает все эти апачи, денверы, пхп, си++, и т.п.. |
|
|
SilverSurfer |
22.1.2017, 1:36;
Ответить: SilverSurfer
Сообщение
#9
|
|
Еще более умудрившись опытом, выкладываю полностью рабочий пример:
Писан на чистых вебсокетах (БЕЗ использования технологии socket.io) 1. Качается эта прога: Node ("recommended" версия там). Инсталится на свой домашний комп. Это сразу (2-в-1 одном флаконе) - и прога-сервер-игры (кодинг программного кода сервера игры, проводится на языке JavaScript - после чего, сохраняется в файл sr.js - после чего, подсовывается в командной строке на вход этой проге при её запуске) - и она же также и веб-сервер сама (на этот веб-сервер - на неё - потом можно будет заходить из инета браузером) 2. Курс молодого бойца по этой проге: 3. На компе создаётся папочка, в которой будет писаться игра (и сервер-игры и клиент-игры). У меня, эта папочка - "C:\...\...\...\proj" 4. В эту папочку, кладётся тот файл sr.js (в котором будет писаться код сервера игры - писаться например открыв этот файл, блокнотом) 5. Внутри этой папочки, создаётся подпапочка "public" - в ней будет лежать клиент игры: 2 файла - index.html (веб-страница которая даётся в браузер подключившемуся клиенту), и cl.js (программный код клиента игры - тобиш, программный код самой этой вебстраницы, который исполняет браузер клиента на стороне компа клиента - код этот программный, он писаемый тоже на языке JavaScript, тоже открывая этот файл например ноутпадом) 7. Кодим клиент-серверный обмен (игра в пинг-понг сообщениями туда-сюда), с помощью чистых веб-сокетов (НЕ socket.io, НЕ TCP-сокеты, и т.п.): proj\sr.js (программа сервер игры): Обычный веб-сервер (статика) на порту 8080 (выдаёт веб-страницу клиентскому браузеру) var http = require('http'); var static = require('node-static'); // Create a node-static server instance to serve the './public' folder // Создаём веб-сервер (который берёт данные клиентской веб-страницы из подпапки "public" и выдаёт эту веб-страницу клиентскому браузеру) var file = new static.Server('./public', { cache: 0 }); // в настройке "cache", отключили кэширование веб-страниц выдаваемых веб-сервером клиентскому браузеру http.createServer(function (request, response) { request.addListener('end', function () { file.serve(request, response); // Serve files! - обслуживаем запросы клиентского браузера ("request") давая на них ответ ("response") }).resume(); // добавили листенер клиентских запросов - функцию }).listen(8080); // веб-сервер "слушает" (листенит) на порту 8080 Сервер чистых веб-сокетов на порту 8081 (чистые вебсокеты - это штатные вебсокеты, без использования библиотек socket.io) var WebSocketServer = new require('ws'); var webSocketServer = new WebSocketServer.Server({port: 8081}); // вебсокет-сервер "слушает" (листенит) на порту 8081 var clients = {}; // массив - подключенные к вебсокет-серверу клиенты webSocketServer.on('connection', function(ws) // задаём функцию обрабатывающую событие подключения вебсокет-клиента { var id = Math.random(); // рандомом сгенерировали "idшник нового клиента" clients[id] = ws; // "положили" данные вебсокет-подключения нового клиента, в массив клиентов по индексу id console.log("У нас новое вебсокет-соединение: " + ws + "; клиенту назначен id: " + id); // отписались в серверной консоли clients[id].send("Вебсокет-сервер сообщает вам ваш id клиента: " + id); // отсылаем нашему новому клиенту, сообщение // обработчик события поступления сообщения от клиента - задаём функцию, обрабатывающую это событие ws.on('message', function(message) { for (var key in clients) // перебираем наш массив клиентов { if (clients[key] == ws) // если это - наш текущий клиент { console.log('От клиента (' + key + ') получено сообщение: ' + message); // отписались в серверной консоли clients[key].send('Вебсокет-сервер отвечает на ваше сообщение, клиент (' + key + '): от вас получено сообщение следующего содержания: ' + message); // высылаем сообщение-ответ этому клиенту } } }); // обработчик события когда клиент отключился - задаём функцию, обрабатывающую это событие ws.on('close', function() { console.log('Закрыто соединение клиента (' + id + ')'); // отписались в серверной консоли delete clients[id]; // удаляем отключенного клиента, из массива клиентов }); }); // конец функции обрабатывающей событие подключения вебсокет-клиента Дальнейший серверный код console.log("Сервер запущен на портах 8080 (static через node), 8081 (pure web-sockets)"); proj\public\index.html (клиентская веб-страница, которую статик веб-сервер выдаёт клиентскому браузеру): <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script src="cl.js"></script> <canvas id="cl">Your browser must support HTML5 to run this game</canvas> <script>redrawCanv();</script> <title>НАША ИГРА</title> </body> </html> здесь: <canvas id="cl">Your browser must support HTML5 to run this game</canvas> - создаём канвас (а если браузер его не поддерживает, в браузер пишется наше сообщение об этом) <script src="cl.js"></script> - программа клиент игры, в этой клиентской веб-странице, рисующая на канвасе <script>redrawCanv();</script> - вызов функции программы клиент игры proj\public\cl.js (программа клиент игры, в клиентской веб-странице, рисующая на канвасе): Веб-сокеты (чистые, без использования библиотек socket.io) if (!window.WebSocket) // если наш клиентский браузер не поддерживает чистые вебсокеты { document.body.innerHTML = 'WebSocket в этом браузере не поддерживается.'; } // создать вебсокет-подключение var socket = new WebSocket("[color=#FF0000]ws://0c4807fc.ngrok.io[/color]"); // обработчик входящих сообщений (от вебсокет-сервера) socket.onmessage = function(event) { var incomingMessage = event.data; alert(incomingMessage); }; Листенеры веб-страницы window.addEventListener('resize', redrawCanv, false); window.addEventListener('orientationchange', redrawCanv, false); Основные функции //перерисовать канвас function redrawCanv() { cnv = document.querySelector('canvas'); cnv.setAttribute('width', okrc(window.innerWidth*0.98)); cnv.setAttribute('height', okrc(window.innerHeight*0.98)); ctx = cnv.getContext('2d'); fontSize = okrc(cnv.width/100); ctx.font = '' + fontSize + 'px calibri'; fontHeight = okrc(fontSize*0.8); // ... дальше, здесь код рисования клиентской картинки игры на канвасе mo = {x:0,y:0}; // координаты курсора мыши cnv.addEventListener("mousemove", onMouseMove, false); // создаём листенер перемещений мыши cnv.addEventListener("click", onClick, false); // создаём листенер кликов (лкм или скм) мыши } Вспомогательные функции //округление в меньшую сторону до целого function okrc(n) { mr = Math.round(n); if (mr < n) return mr; return mr-1 } // листенер перемещений мыши function onMouseMove(e) { mo.x = e.clientX - cnv.offsetLeft; mo.y = e.clientY - cnv.offsetTop; if (mo.x >= gr.plr.hand.x && mo.x <= gr.plr.hand.xe && mo.y >= gr.plr.hand.y && mo.y <= gr.plr.hand.ye) { var cur = plr.hand.cur; if (!(mo.x >= plr.hand.cards[cur].x && mo.x <= plr.hand.cards[cur].xe && mo.y >= plr.hand.cards[cur].y && mo.y <= plr.hand.cards[cur].ye)) { var ikol = plr.hand.cards.length - 1; for (var i = 0; i <= ikol; i++) { if (mo.x >= plr.hand.cards[i].x && mo.x <= plr.hand.cards[i].xe && mo.y >= plr.hand.cards[i].y && mo.y <= plr.hand.cards[i].ye) { plr.hand.cur = i; drawCard(plr.hand.cards[i]); break; } } } } }; // листенер кликов (лкм или скм) мыши function onClick(e) { outgoingMessage = "клик мышью: [ x: " + mo.x + " | y: " + mo.y + "]"; socket.send(outgoingMessage); } 8. В коде sr.js, мы использовали работу с http. Поэтому, установим для ноды эту библиотеку, которую мы используем в коде: 9. Открывается командная консоль (cmd). 10. В ней идётся (с помощью команд cd) внутрь папочки proj 11. После того как пришли в ту папочку, набираем команду: npm install http --save (жмём Enter) - в папке proj, должна появиться подпапка "node_modules" 12. Запуск в небо: 13. Программу ngrok, положим в ту же папочку proj (в её корень) - гордо показаться нашему новоиспечённому серваку игры (и вебсерверу-статикв нём, и вебсокет-серверу в нём) на просторах инета, поможет эта прога. 14. Открывается командная консоль (cmd). 15. В ней идётся (с помощью команд cd) внутрь папочки proj 16. После того как пришли в ту папочку, набираем команду: ngrok http 8080 (и жмём Enter) - ура, порт 8080 (статик веб-сервер) проброшен в интернет! 17. Открывается ЕЩЁ ОДНА командная консоль (cmd). 18. В ней идётся (с помощью команд cd) внутрь папочки proj 19. После того как пришли в ту папочку, набираем команду: ngrok http 8081 (и жмём Enter) - ура, порт 8081 (вебсокет-сервер) проброшен в интернет! 20. В окне cmd из п.19 (ИМЕННО ИЗ НЕГО), смотрим на вот такую строчку: (опять пример, этот текст при каждом запуске ngrok всегда разный!) Forwarding http://0c4807fc.ngrok.io -> localhost:8081 - нас из этой строчки, интересует ТОЛЬКО вот эта её подстрочка: 0c4807fc.ngrok.io - и копируем ЭТУ ПОДСТРОЧКУ в буфер обмена (как копировать любой текст из окна cmd, читай в инете) 21. Открываем блокнотом файл cl.js (наша программа клиент игры). В нём идём на строчку, выделенную у меня в примере красным. Пастим из буфера обмена, заменяя ПОДСТРОЧКУ (которая после //, и до закрывающей кавычки). Проверяем всё ещё раз (правильно ли вставилось), сохраняем файл. В КРАСНОЙ СТРОЧКЕ, В ЕЁ НАЧАЛЕ ВСЕГДА ДОЛЖНО СТОЯТЬ WS (А НЕ HTTP!!!!!!!!!!!!!!) 22. Открывается ЕЩЁ ОДНА (уже, третья) командная консоль (cmd). 23. В ней идётся (с помощью команд cd) внутрь папочки proj 24. После того как пришли в ту папочку, набираем команду: node sr.js (и жмём Enter) - ура, наш сервер игры запущен (он же, и веб-сервер статик по совместительству - он же, и сервер веб-сокетов по совместительству) (а нгроки которые выше, пробросили его порты - порт веб-сервер статик, 8080 - а также порт веб-сокетов, 8081 - в интернет) 25. В консоли из п.16, смотрим следующую строчку: (опять пример, этот текст при каждом запуске ngrok всегда разный!) Forwarding http://864039db.ngrok.io -> localhost:8080 - нас из этой строчки, интересует ТОЛЬКО вот эта её подстрочка: http://864039db.ngrok.io - и копируем ЭТУ ПОДСТРОЧКУ в буфер обмена (как копировать любой текст из окна cmd, читай в инете) 26. Открываем на своём компе браузер, и в адресную строку пастим этот веб-адрес, жмём Enter. 27. Если всё сделано верно, наслаждаемся как в браузере открылась клиентская веб-страница игры - зашлось браузером на неё. (если вы увидели на странице надпись вроде "upgrade required" - значит вы браузером, зашли НЕ на адрес ВЕБ-страницы, А на адрес вебсокетов - так делать, НЕ надо)) 28. Кликаем мышью ВНУТРИ канваса (сделаем несколько кликов) 29. Наслаждаемся как в cmd из п.21 написало "клиент подключен", а потом "сообщение от клиента" - а в браузере, выскочило оповещение с сообщением присланным сервером игры! 30. Друк открывает у себя дома браузер, заходит им на веб-адрес (который в п.23) - и - о чудо! - он зашёл браузером этим своим на вебстраницу клиента вашей игры. 31. Кликая там по канвасу, второе чудо - обмен сообщениями браузера друка с сервером игры 32. Всё программирование - и клиента игры, и сервера игры - производится исключительно на языке JavaScript (не перегружая тыкву сто500 разными языками программирования) 33. Онлайново проверить свой JavaScript-код на синтаксическую корректность: здесь (копипастить туда из ноутпада - если надпись там внизу не стала зелёненькой, а красненькая, значит ищи ошибку, по подсказкам там справа - скобочка, точка с запятой, и т.п. упущения - без исправления всех упущений, данный код просто не заработает) (можно также кодить в среде разработки вроде Eclipse Jee Neon, но не рекомендуется до достижения "высот" перегружать ею свою тыкву) 34. Онлайново сделать красивый внешний вид JavaScript-кода, грамотно расставить переносы строк в нём: здесь 35. P.S. (для адванседов, уже): если при кодинге потребуется установка доп.библиотек которые есть у node, делается это "кошерным" заходом в папку игры (консолью cmd, пп.10-11), и выполнением там следующей команды: npm install <имя_этой_библиотки> --save (без угловых скобок, и с обязательной припиской --save, ну и не забыть написав команду нажать Enter)) 36. P.P.S. Ограничиться вместо двух портов (8080 и 8081 в примере) всего лишь одним портом (повесив на него И веб-сервер статик, И вебсокет-сервер) - НЕЛЬЗЯ! |
|
|
k0ttee
|
Сообщение
#10
|
|
А еще говорят, что нельзя вот так просто взять и начала писать на Node JS. :rjunimagu:
-------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Партнерская программа для Эзотерики, Магии, Таро партнерка для эзотерики |
0 | LiveExpert | 399 | Вчера, 15:13 автор: LiveExpert |
|
Партнерская программа для Эзотерики, Магии, Таро партнерка для эзотерики |
0 | LiveExpert | 357 | Вчера, 15:13 автор: LiveExpert |
|
Azinomoney.com - гемблинг-партнерка с 65%RS для каждого Гарантированный заработок на гемблинг-трафике |
65 | AzinoMoney | 29206 | 27.3.2024, 19:10 автор: AzinoMoney |
|
Делаю полностью уникальный дизайн для сайтов! | 46 | AlexDIZ | 93537 | 26.3.2024, 20:03 автор: AlexDIZ |
|
Большие ставки для кликов в Я.Директ. Как удешевить? | 2 | rownong27 | 1124 | 26.3.2024, 14:13 автор: knezevolk |
Текстовая версия | Сейчас: 29.3.2024, 18:43 |