Pull to refresh
4
0
cevek @cevek

User

Send message
например в co.js колбэки не нужны, но нужно врапить функции
co(function *(){
  var a = yield get('http://google.com');
  var b = yield get('http://yahoo.com');
  var c = yield get('http://cloudup.com');
  console.log(a.status);
  console.log(b.status);
  console.log(c.status);
})()
Чем не костыль делать обертку для каждой асинхронной функции в генераторе?
Из двух зол как говорится.
Уже давно использую свою библиотеку с использованием генераторов на стороне nodejs.
Сейчас уже не представляю как можно писать читабельный бекэнд без генераторов, либо уж ИМХО java php или ruby

Если кому интересно могу выложить на гитхаб. Никаких проблем пока не возникает, исключения работают на ура

Пример модуля рассылки нотификаций вконтакте
var rest = require("../rest");
module.exports = function (app) {

    function *vkPush(vkusers, message) {
        if (!(vkusers instanceof Array))
            throw new Error("vkusers is not array");

        var APP_ID = 11111;
        var APP_SECRET = "xxxxx";
        var uids = [];
        try {
            var url = 'https://oauth.vk.com/access_token?client_id=' + APP_ID + '&client_secret=' + APP_SECRET + '&grant_type=client_credentials';
            var data = yield rest.get(url, vkPush.next); //vkPush.next можно записать как arguments.callee.next
            var token = data.access_token;
            var url = 'https://api.vk.com/method/secure.sendNotification?access_token=' + token + '&v=5.7&user_ids=' + vkusers.join(',') + '&message=' + encodeURI(message) + '&client_secret=' + APP_SECRET;
            var data = yield rest.get(url, vkPush.next);
            if (data.response) {
                uids = uids.concat(data.response.split(","));
                console.log("Received", uids);
            }
        }
        catch (e) {
            console.error(e.stack || e);
        }

        return uids;
    }

    return function *fn(req, res) {
        var table = "notifications";
        var user_id = req.user.id;
        var client_id = req.user.id;
        var id = +req.body.id || +req.query.id;


        // Для асинхронных операций
        var data = {};
        app.db.brodie("Query1", function (err, data) {
            data.query1 = data;
        }.async());

        app.db.brodie("Query2", function (err, data) {
            data.query2 = data;
        }.async());

        app.db.brodie("Query3", function (err, data) {
            data.query3 = data;
        }.async());

        // здесь будет остановка до тех пор пока все запросы не отработают
        yield true;

        try {
            switch (req.method) {
                case "GET":
                    var rows = yield app.db.brodie.query("SELECT * FROM ?? WHERE client_id=? ORDER BY date DESC", [table, client_id], fn.next);
                    res.send(rows);
                    break;

                case "PUT":
                    var message = req.body.text;
                    var data = {
                        client_id: client_id,
                        user_id: user_id,
                        text: message,
                        received: 0,
                        date: new Date()
                    }
                    var vkusers = yield app.db.brodie.query("SELECT * FROM notification_users WHERE client_id=? AND type='vk'", [client_id], fn.next);
                    var receiveUids = yield vkPush.run(vkusers, message);
                    if (receiveUids.length)
                        yield app.db.brodie.query('UPDATE notification_users SET last_send=NOW() WHERE uid IN (?) AND type="vk" AND client_id=?', [receiveUids, client_id], fn.next);

                    data.received = receiveUids.length;
                    var result = yield app.db.brodie.query("INSERT INTO ?? SET ?", [table, data], fn.next);
                    var rows = yield app.db.brodie.query("SELECT * FROM ?? WHERE id=?", [table, result.insertId], fn.next);
                    res.send(rows[0]);
                    break;


                default:
                    res.send(500);
                    break;
            }
        }
        catch (e) {
            console.error(e.stack || e);
        }

    }.fn();
}

если игроков не много я думаю можно делать подключение многое ко многим, т.е. каждый игрок посылает свои действия для всех + для сервера, а те уже в свою очередь формируют мир в зависимости от поступаемых данных
сделал выстрел, если реально убил то значит посылаешь команду о попадании для всех игроков, а сервер уже проверит так оно было или нет
пинг гугла в спб 8мс, яндекс 15мс, до сервера уфы к примеру 40мс
если пинг будет скажем в 30мс то это 15мс на отправку пакета, не так уж и много
если делать игру на webrtc можно подключатся к игрокам напрямую, а на сервере будет просто проверка всех действий игроков
если игроки будут с одного города то можно играть абсолютно без никаких лагов
а где можно найти взять node-webkit с ночной сборкой ноды, уж очень хочется полноценного harmony?
это работет закон притяжения с помощью мыслей =)
«неважно хотите вы этого или нет, но этот закон работает для всех, всегда и везде» — из фильма Секрет
нет слов…
crazy man
Супер! Было очень интересно послушать. Спасибо!
а сколько нужно сделать шагов чтобы зарядить мобильник?
если попадет в массы то использование ИИ будет 50/50 (в добрых целях/в корыстных целях) — закон равновесия природы, как ни вертись
Чувство счастья внедрено в нас лишь для того, чтобы был какой то стимул двигаться дальше. Другими словами двигать эволюцию. Это вознаграждение за движение вперед.
почему не учлись сложности при верстке хотя бы среднего макета?
в среднем больше чем на 7% не оптимизирует…
Email (для входа)
Nick (Любые символы)
domain.site.ru (для доменов если необходимо, с проверкой на уникальность)
Password
>вообще каждая защита, также как и каждая отака это творческий процесс, и каждая сторона стремится изъебнуться по свойму.
Два умных программиста пытаются показать друг другу кто кого умнее =)
Вроде бы считал что знаю jQuery на достаточном уровне, но все равно открыл для себя что-то новое. Спасибо!
есть более интересная и удобная вещица созданная из той же документации
visualjquery.com/1.1.2.html
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity