|
JavaScript / HTML Создание динамической разметки страниц |
10.10.2013, 16:42
|
#46
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
И я подобное писал для обработки массива и секвенции, но в примерах выше оно не помогает
// index - startIndex // processor - function(item, itemIndex, next) module.exports.processArrayAsync = function (array, index, processor, onEndCallback) { index = typeof index !== 'undefined' ? index : 0;
if (index >= array.length) { if (onEndCallback) onEndCallback(); return; } process.nextTick(function () { processor(array[index], index, function () { module.exports.processArrayAsync(array, index + 1, processor, onEndCallback); }); }); };
module.exports.runJobsQueueAsync = function(jobs, index, onEndCallback) { index = typeof index !== 'undefined' ? index : 0;
if (index >= jobs.length) { if (onEndCallback) { onEndCallback(); } return; } process.nextTick(function () { jobs[index](function () { module.exports.runJobsQueueAsync(jobs, index + 1, onEndCallback); }) }); };
|
(Offline)
|
|
10.10.2013, 21:10
|
#47
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.JS + MongoDB
Потому что тебе нужен не статичный chain, что потребует модификации в твой - возможность вставлять job'ы по пути выполнения.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.10.2013, 21:16
|
#48
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
Хм, а я не подумал что можно вставлять джобы в цепочку... Спасибо, навел на мысль...
|
(Offline)
|
|
10.10.2013, 22:33
|
#49
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
Я это сделал!
function AFlow() { this.index = 0; }
module.exports.AFlow = AFlow;
module.exports.run = function (jobs) { var flow = new AFlow; flow.jobs = jobs; flow.doJob(); return flow; };
AFlow.prototype.add = function (job) { this.jobs.splice(this.index + 1, 0, job); };
AFlow.prototype.doJob = function () { var flow = this; if (flow.index >= flow.jobs.length) { return; } process.nextTick(function () { flow.jobs[flow.index](function () { flow.index++; flow.doJob(); }, flow) }); };
использование:
var util = require('util'); var AFlow = require('AFlow');
var data = [];
flow = AFlow.run([ function (next) { data.push('one'); console.log(util.inspect(data)); setTimeout(next, 500); }, function (next) { data.push('two'); flow.add(function (next) { data.push('three'); console.log(util.inspect(data)); setTimeout(next, 500); }); console.log(util.inspect(data)); setTimeout(next, 500) }, function (next) { data.push('four'); console.log(util.inspect(data)); setTimeout(next, 500) }, function(){ data.push('five'); console.log(util.inspect(data)); } ]);
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.10.2013, 16:38
|
#50
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
а есть ли для node js ubjson парсер?
UPD: кажется нагуглил https://github.com/Sannis/node-ubjson
|
(Offline)
|
|
29.10.2013, 22:46
|
#52
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
Я уже написал бинарную сериализацию пакетов и связал Unity и node js по tcp с использованием net модуля. Сейчас хочется сделать некую архитетуру для создания ММО решений.
|
(Offline)
|
|
30.10.2013, 02:18
|
#53
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.JS + MongoDB
Не думаешь зарефакторить код, и выложить github проект? Т.к. думаю на него спрос будет весьма большой.
Если с точки зрения пользователя это работает как socket.io то вообще сказка и у тебя есть возможность менеджить популярный модуль на npm.
В общем, на такой модуль будет спрос если его maintain'ить нормально.
|
(Offline)
|
|
30.10.2013, 08:08
|
#54
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
Сообщение от moka
Не думаешь зарефакторить код, и выложить github проект? Т.к. думаю на него спрос будет весьма большой.
Если с точки зрения пользователя это работает как socket.io то вообще сказка и у тебя есть возможность менеджить популярный модуль на npm.
В общем, на такой модуль будет спрос если его maintain'ить нормально.
|
Пока еще не думал, видно будет. Я бы предложил тебе поучаствовать в его разработке если интересно, когда будет что-то получаться, то можно будет подумать о выкладывании. Пока наверное рано.
|
(Offline)
|
|
30.10.2013, 10:52
|
#55
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
На данный момент чат сервер "все со всеми" можно сделать вот так:
var nodeSharpTCP = require('NodeSharpTCP');
// полиси сервер var SocketPolicyServer = nodeSharpTCP.SocketPolicyServer; SocketPolicyServer.listen(__dirname + '/public/crossdomain.xml', 843);
// чат сервер var tcpServer = new nodeSharpTCP.TCPServer();
tcpServer.packetProcessors.push(function (server, client, packet, next) { server.broadcastObject(packet); });
tcpServer.listen(8124, function () { console.log('server bound'); });
|
(Offline)
|
|
01.11.2013, 01:18
|
#56
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Node.JS + MongoDB
Прикольно.
Как понимаю нужен обмен Policy чтобы сделать нормальное общение? (также как в flash'е?).
packetProcesors - как понимаю ты пушаешь функцию потом которая будет вызываться для каждого пакета.
Как тебе подход как в socket.io? В плане имён пакетов и подпиской на них?
Например:
var UnitySocket = require('unitySocket').Socket, PolicyProvider = require('unitySocket').PolicyProvider;
// create policy server with preloaded policy provider file var unityPolicy = new PolicyProvider(__dirname + '/public/crossdomain.xml'); unityPolicy.listen(843);
// create server socket var server = new UnitySocket();
// if error occured server.on('error', function(err) { throw err; })
// once bound server.on('bound', function() { // server is bound and ready to accept connections });
// someone connects server.on('connect', function(socket) {
// subscribe to generic event for each packet socket.on('packet', function(name, data) { // name == 'foo' // data == json });
// subscribe to packet with specific name socket.on('foo', function(data) { // data == json });
// subscribe to client disconnect socket.on('disconnect', function(data) { // data contains reason and additional details });
});
// bind server socket server.listen(8080);
В node.js да и везде вообще, очень важен поток мысли и дизайн технического решения.
Например использовать EventEmitter'ы для использования event-driven парадигмы - очень збсь штука.
Также можно предоставить promises как альтернативная парадигма, это уже зависит от разраба что и как юзать.
Я сейчас promises юзаю, и порой очень просто и элегантно выходят решения (никаких пирамид).
Можно выложить на github и там уже по пути менеджить и т.п.
|
(Offline)
|
|
01.11.2013, 07:58
|
#57
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Node.JS + MongoDB
Сообщение от moka
Прикольно.
Как понимаю нужен обмен Policy чтобы сделать нормальное общение? (также как в flash'е?).
|
Да, WebPlayer Unity так же проверяет возможность подключения как и флеш.
Сообщение от moka
packetProcesors - как понимаю ты пушаешь функцию потом которая будет вызываться для каждого пакета.
|
Да там похоже на middleware в express
Сообщение от moka
Как тебе подход как в socket.io? В плане имён пакетов и подпиской на них?
|
Вчера написал по просьбе ant2on'а нечто похожее на socket.io как враппер над своим сервером.
Node js
var util = require('util'); var NodeSharpTCP = require('NodeSharpTCP');
// полиси сервер var SocketPolicyServer = NodeSharpTCP.SocketPolicyServer; SocketPolicyServer.listen(__dirname + '/public/crossdomain.xml', 843);
// евент сервер var EventServer = NodeSharpTCP.EventServer;
var server = new EventServer();
server.on('connection', function(client){
console.log('Clients: '+ server.clients.length);
client.emit('welcome', {id: client.id});
client.on('disconnect', function(){ console.log('Clients: '+ server.clients.length); });
client.on('message', function(msg){ console.log('message: '+ util.inspect(msg)); client.sendMessage(msg); });
client.on('custom-event', function(data){ console.log('custom-event: '+ util.inspect(data)); client.emit('custom-event', data); }); });
server.listen(8124, function(){ console.log('Event Server bound') });
Unity/C#
using System.Collections.Generic; using BinarySerialization; using UnityEngine; using System.Collections;
public class EventServerClientTest : MonoBehaviour { private EventServerClient _client;
public void Start () { _client = GetComponent<EventServerClient>();
_client.On("connect", OnConnect); _client.On("welcome", OnWelcome); _client.On("custom-event", OnCustomEvent);
_client.Connect(); }
private void OnCustomEvent(object obj) { Debug.Log("Custom Event Received: " + obj.ToDebugString()); }
private void OnWelcome(object obj) { var welcomeEvent = (Dictionary<string, object>) obj; Debug.Log("Welcome: " + welcomeEvent["id"]); }
private void OnConnect(object obj) { Debug.Log("OnConnect"); _client.Emit("custom-event", new object[]{1, true, "three"}); }
}
Последний раз редактировалось pax, 05.11.2013 в 18:18.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:51.
|