7

Интересует с помощью каких технологий достигается максимально низкий отклик для многопользовательских игр в веб-браузере? Какую например базу данных использовать? SQLite хороший вариант? В плане языка интересует больше php(хотя, я понимаю он далеко не самый быстрый для cgi), но с удовольствием послушаю другие варианты. И есть какие-нибудь интересные статьи по этому вопросу?

culebre
  • 1,238
  • БД и язык это пол беды! 85% это шустрый сервер! – Palmervan Oct 27 '11 at 13:35
  • Пол беды, кстати, это 50%=). А скорость обмена данными? Вообще есть возможность эффективно хранить данные в оперативной памяти, вообще не прибегая к базе, учитывая, что сложные структуры не нужны. – culebre Oct 27 '11 at 13:40
  • возможно но хранить промежуточное состояние всеравно необходимо, ато представьте играли игроки играли и тут ОП - все лягло, наша песня хороша начинай сначала ^^
    Естественно хранить инфу в оперативке можно и нужно, но делать это надо с умом и еще раз повторюсь - это вас никак не избавляет от необходимости как-то хранить состояние сервера...
    –  Oct 27 '11 at 13:44

1 Answers1

10

Тут не так в БД проблема, для максимально быстрого отклика используются сокеты...
Именно для игр - рекомендую java или nodejs ( сам выбрал бы последнее ибо выиграш в скорости разработки несмотря на "риск" использования новой технологии )

Сам недавно сильно заинтересовался подобными вопросами, одно я понял ( понимал правда и раньше :) ) наверняка - не так важна БД, важен сервер ( всмысле серверный код )...

По поводу php - в этом случае действительно ИМХО мягко говоря не лучший вариант...

UPD Небольшой пример клиента и сервера с использованием nodejs + socket.io
Логично что для того чтобы все это работало необходимо установить nodejs + скачать socket.io, в этом всем желающим поможет гугл, я же просто приведу пример...

Сервер

/*
 * require это подключение, у меня на linux'e установка socket.io происходит
 * прямо из дистрибутива, если вы просто скачали библиотеку то надо указать
 * к ней полный путь
 */
var io = require('socket.io').listen(8010, '127.0.0.1');
//  тут грубо говоря мы пишем - пускай будет веб сокет сервак
//  на 8010 порте и c IP 127.0.0.1

// Навешиваем обработчик на подключение клиента io.sockets.on('connection', function (socket) { // функция переданная в обработчик инициализирует // конкретный экземпляр сокета - socket

// теперь мы с ним законно можем работать

// ну и чтобы внести хоть какойто смысл в это все
// сделаем вывод сообщений отправленых клиентом 
// в консольку...
socket.on('message', function (msg) {
    console.log(msg);
});

socket.on('disconnect', function() {
    console.log("User disconnected");
});

});


Клиент

Для начала нам необходимо подключить скрипт которы и будет работать над подключением и разруливание проблем кроссбраузерности, т.е. если браузер поддерживает WebSocket - использоваться будут именно они, если же нет то пробует создать xhr, long puling и т.д. и т.п. Впринцыпе вам не нужно особо вникать что да как, достаточно просто создать подключение... Делается это так

    <script src="http://127.0.0.1:8010/socket.io/socket.io.js"></script>

Думаю тут все понятно...

Ну и наш "основной" скрипт...

var socket;    // ну собственно переменная для сокета
var msg=0;     // счетчик отправленных серверу сообщений
onload = function() {
    socket = io.connect('http://127.0.0.1:8010'); // конектимся
//ну а тут вешаем обработчик на подключение...
socket.on('connect', function () {
    setInterval("socket.send('Какоето сообщение - ' + msg); msg++;", 1000);
    //ну и с интервалом в секунду кидаем cерверу текст и инкриментим наш счетчик...
});

};

Ну собственно все теперь осталось запустить наш сервер и смотреть результат :)
Как видите все парадоксально просто...

PS: после того как написал первый раз нечто подобное сразу же влюбился в nodejs ^^ PPS: тестил в мазиле, опере, хрониуме, хроме - проблем обнаружено не было, если у браузера нет реализации WebSocket используются пляски с бубном в клиентском скрипте server.io, возможно даже в IE сработало бы (хотя если вопрос об игре, не думаю что тут есть смысл хоть как-то пытаться писать клиента под IE)


UPD2

Вики socket.io
Офф сайт
Кстати читал о событиях и тому подобном не в вики, но тот сайт где я тогда читал навсегда забыт на 10+ страницах гугла :)

PS:сокеты полноценны и позволяют намного большее чем просто отправлять какой-то текст и выводить в консоль, но это, те кому интересно, и так, вскоре, узнают сами :)

  • Простите за невежество, а сокеты, это Unix-сокеты, или нечто в низкоуровневом программировании? Еще вспоминается что вроде комбинация порт и ip-адрес сокетом называется. – culebre Oct 27 '11 at 13:50
  • 3
    да нет это способ передачи данных, идея в том что клиент открывает соедениние с сервером и оно уже не закрывается ( соответственно нет необходимости в ajax'e ). Кстати по поводу аякса - однозначно не вариант, во первых все время передаем лишнюю инфу, во вторых нет четкой связи клиента с сервером...
    Вообще идея сокетов примерно такая - привет сервер, привет клиент, ну все погнали... Потом клиент может отправлять любые данные и сервер соответственно, причем сервер может отправлять данные, например изза действий других игроков, что при использовании ajax'a было бы невозможно...
    –  Oct 27 '11 at 13:59
  • Кстати в написании веб сокет сервера нет вообще ничего сложного, я вас уверяю...
    Есть набор событий, вам (грубо говоря) просто нужно написать ихобработку... Опять тки это астрактно написано, веб сокет сервера могут быть ооочень сложными, хотя, в тоже время, парадоксально простыми.
    Вообщем боятся их ожнозначно не нужно, ничего сложного в них нет
    –  Oct 27 '11 at 14:01
  • И реализовать это можно, я так понимаю, на nodejs. А клиентская сторона в виде браузера как это все принимает в виде post запросов? – culebre Oct 27 '11 at 14:05
  • не совсем, собственно просто погуглите в сторону socket.io, все очень и очень просто... Сейчас напишу простой пример для клиента и сервера –  Oct 27 '11 at 14:12
  • @AlexWindHope ! Про веб сокет очень интересно. Если правильно понял, можно написать клиента под браузером, который по TCP сокету общается с сервером ? Надеюсь это не Java апплет ?

    Если можно поподробнее (язык, библиотека, как загружается в браузер и т.п.)

    – avp Oct 27 '11 at 14:26
  • вот вам пример реализации nodejs + socket.io...
    Никаких аплетов естественно нет :)
    –  Oct 27 '11 at 14:31
  • Отлично. Надеюсь socket.on('receive', function () { или что-то для асинхронного чтения существует.

    Т.е. это выглядит, как нормальные сокеты, сервер можно писать на чем угодно.

    Ссылочку на доку опубликуйте, плиз.

    – avp Oct 27 '11 at 14:39
  • СПАСИБО !!! Теперь, если это в самом деле работает, совсем другое программирование пойдет ! – avp Oct 27 '11 at 14:52
  • Я просто проникаюсь глубоким уважением к js.)) – culebre Oct 27 '11 at 16:46