например в 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 можно подключатся к игрокам напрямую, а на сервере будет просто проверка всех действий игроков
если игроки будут с одного города то можно играть абсолютно без никаких лагов
Чувство счастья внедрено в нас лишь для того, чтобы был какой то стимул двигаться дальше. Другими словами двигать эволюцию. Это вознаграждение за движение вперед.
>вообще каждая защита, также как и каждая отака это творческий процесс, и каждая сторона стремится изъебнуться по свойму.
Два умных программиста пытаются показать друг другу кто кого умнее =)
Из двух зол как говорится.
Сейчас уже не представляю как можно писать читабельный бекэнд без генераторов, либо уж ИМХО java php или ruby
Если кому интересно могу выложить на гитхаб. Никаких проблем пока не возникает, исключения работают на ура
сделал выстрел, если реально убил то значит посылаешь команду о попадании для всех игроков, а сервер уже проверит так оно было или нет
если пинг будет скажем в 30мс то это 15мс на отправку пакета, не так уж и много
если делать игру на webrtc можно подключатся к игрокам напрямую, а на сервере будет просто проверка всех действий игроков
если игроки будут с одного города то можно играть абсолютно без никаких лагов
«неважно хотите вы этого или нет, но этот закон работает для всех, всегда и везде» — из фильма Секрет
crazy man
Nick (Любые символы)
domain.site.ru (для доменов если необходимо, с проверкой на уникальность)
Password
Два умных программиста пытаются показать друг другу кто кого умнее =)
visualjquery.com/1.1.2.html