Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 May 04

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Alexander Kabolov
Привет всем, посоветуйте пожалуйста best practise. Принимаю большое кол-во запросов - до 20 (один за одним от клиента - сам запрос содержит буферы до 2мб) как их будет быстрее всего обработать на ноде?
Підозрюю, що паралельно.
Тобто з допомогою балансування навантаження, кластеризації з допомогою процесів і потоків і т. д.
источник

AK

Andriy Khamurda in NodeUA - JavaScript and Node.js in Ukraine
Alexander Kabolov
Привет всем, посоветуйте пожалуйста best practise. Принимаю большое кол-во запросов - до 20 (один за одним от клиента - сам запрос содержит буферы до 2мб) как их будет быстрее всего обработать на ноде?
20 зап/сек не багато. Ви будете обмежені скоріше аплоад швидкістю клієнта.
Запити якось повязані між собою? Опрацьовують одні і ті самі дані?
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
20 в сек это вообще не много, нода выдержит спокойно. Если у вас при 20 запросах в сек что-то тормозит то дело не в ноде, а например в плохо написанных запросах к базе
источник

V

Vitaliy in NodeUA - JavaScript and Node.js in Ukraine
Alexander Kabolov
Привет всем, посоветуйте пожалуйста best practise. Принимаю большое кол-во запросов - до 20 (один за одним от клиента - сам запрос содержит буферы до 2мб) как их будет быстрее всего обработать на ноде?
20 це небагато, але якщо цікавить тема - https://habr.com/ru/post/497090/ тут в першому чи другому відео показано, що можна зробити з великою загрузкою + приклад з семафором в стартер-кіті
источник

А

Андрей in NodeUA - JavaScript and Node.js in Ukraine
Друзья, всем привет) Я джуниор разработчик и я столкнулся с проблемой при попытке отправить gzip на сервер  и сделать декомпресию при помощи вот этой мидлвары:
import zlib from 'zlib';
import { promisify } from 'util';
import toArray from 'stream-to-array';
import * as express from 'express';
import { Middleware, ExpressMiddlewareInterface } from 'routing-controllers';

@Middleware({ type: 'before' })
export class GzipMiddleware implements ExpressMiddlewareInterface {

   public async use(
       req: express.Request,
       res: express.Response,
       next: express.NextFunction
   ) {
       if (req.headers['content-type'] === 'application/gzip') {
           toArray(req)
               .then(parts => {
                   const buf = Buffer.concat(parts);
                   return promisify(zlib.gunzip)(buf);
               })
               .then(decompressedMessage => {
                   req.body = (decompressedMessage as Buffer).toJSON();
                   next();
               })
               .catch(err => {
                   console.error(err);
                   next(err);
               });
       }
   }
}

Но я получаю ошибку
Error: unexpected end of file\n    at Gunzip.zlibOnError (zlib.js:153:15)
. Алгоритм сжатия DEFLATE, это точно(третий байт 0x08). Пробовал использовать метод inflate, но получил ошибку, мол не получилось прочитать заголовок. Возможно кто-то знает что можно сделать, или сталкивался с такой же ошибкой, буду очень благодарен за помошь
источник

DB

Dima Boginsky in NodeUA - JavaScript and Node.js in Ukraine
@tshemsedinov  вы здесь говорите что воркеры отвечают через мастер, что мешает равномерной загрузке ядер. Но разве воркеры не пишут напрямую в полученный от мастера клиентский сокет?
https://www.youtube.com/watch?v=YPoiltzkUXI
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
Друзья, всем привет, нужна ваша помощь. Я хочу получать записи из бд без обновления. Я использую покаместь вот так: сначала идет connect socket, внутри функции, у меня идет setInterval в 1 секунду, а функции setInterval идет уже селект запрос в бд и в функции селект запроса, у меня уже идет socket.on отправка результата. Но может есть другой способ, не используя сет интервала
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Dima Boginsky
@tshemsedinov  вы здесь говорите что воркеры отвечают через мастер, что мешает равномерной загрузке ядер. Но разве воркеры не пишут напрямую в полученный от мастера клиентский сокет?
https://www.youtube.com/watch?v=YPoiltzkUXI
Когда я записывал это видео еще воркер-тредов не было. Скорее вмнго я говорю про cluster и child_process. При использовании cluster только соединение происходит в мастере, потом дескриптор сокета передается в дочер6ий процесс и уже оттуда пишем и завершаем, как вы совершенно правильно и сказали. А вот в чайлд процессах и воркнрах запросы и принимаются и обрабатываются в дочерних процессах и потоках соответственно.
источник

YO

Yuriy Oles in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Когда я записывал это видео еще воркер-тредов не было. Скорее вмнго я говорю про cluster и child_process. При использовании cluster только соединение происходит в мастере, потом дескриптор сокета передается в дочер6ий процесс и уже оттуда пишем и завершаем, как вы совершенно правильно и сказали. А вот в чайлд процессах и воркнрах запросы и принимаются и обрабатываются в дочерних процессах и потоках соответственно.
Были бы вместо видео тексты - корректировать бы было их запросто, воспринимались бы лучше и всегда бы были актуальными, из-за малых усилий на их корректировку. Само собой что можно было бы их писать на английском, как Кантор, а помошники могли бы переводить и на украинский, и на русский, и пр. Мировой уровень был бы. Если бы...
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Yuriy Oles
Были бы вместо видео тексты - корректировать бы было их запросто, воспринимались бы лучше и всегда бы были актуальными, из-за малых усилий на их корректировку. Само собой что можно было бы их писать на английском, как Кантор, а помошники могли бы переводить и на украинский, и на русский, и пр. Мировой уровень был бы. Если бы...
Можно написать текст по этим лекциям самостоятельно
Внести вклад в движение
источник

YO

Yuriy Oles in NodeUA - JavaScript and Node.js in Ukraine
Думаю что лучше автора никто не напишет, и актуальность поддерживать не сможет. Переводить по его присмотром и помощники смогут. А озвучить действительно может практически любой диктор/актер с хорошо поставленным голосом.
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
Ребят, подскажите плиз, как получить сессию, т.е я на php создал сессию и в ноде хочу получить ее
источник

V

Vitaliy in NodeUA - JavaScript and Node.js in Ukraine
☆Даня☆
Ребят, подскажите плиз, как получить сессию, т.е я на php создал сессию и в ноде хочу получить ее
select з бази?
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
php $_SESSION['userid'] = '251313';
Вот эту сессию я хочу получить только в node
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
Я бы мог записать значении сессии из php в js переменную, а потом передать уже эту переменную, но значение переменных можно редактировать в браузере
источник

V

Vitaliy in NodeUA - JavaScript and Node.js in Ukraine
А яка задача? Звучить трішки дивно
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
Vitaliy
А яка задача? Звучить трішки дивно
Я хочу создать чат между 2 пользователями, чтоб я мог узнать кому я отправил сообщение
источник

V

Vitaliy in NodeUA - JavaScript and Node.js in Ukraine
А який стек технологій, яка архітектура?
источник

А

Андрей in NodeUA - JavaScript and Node.js in Ukraine
Андрей
Друзья, всем привет) Я джуниор разработчик и я столкнулся с проблемой при попытке отправить gzip на сервер  и сделать декомпресию при помощи вот этой мидлвары:
import zlib from 'zlib';
import { promisify } from 'util';
import toArray from 'stream-to-array';
import * as express from 'express';
import { Middleware, ExpressMiddlewareInterface } from 'routing-controllers';

@Middleware({ type: 'before' })
export class GzipMiddleware implements ExpressMiddlewareInterface {

   public async use(
       req: express.Request,
       res: express.Response,
       next: express.NextFunction
   ) {
       if (req.headers['content-type'] === 'application/gzip') {
           toArray(req)
               .then(parts => {
                   const buf = Buffer.concat(parts);
                   return promisify(zlib.gunzip)(buf);
               })
               .then(decompressedMessage => {
                   req.body = (decompressedMessage as Buffer).toJSON();
                   next();
               })
               .catch(err => {
                   console.error(err);
                   next(err);
               });
       }
   }
}

Но я получаю ошибку
Error: unexpected end of file\n    at Gunzip.zlibOnError (zlib.js:153:15)
. Алгоритм сжатия DEFLATE, это точно(третий байт 0x08). Пробовал использовать метод inflate, но получил ошибку, мол не получилось прочитать заголовок. Возможно кто-то знает что можно сделать, или сталкивался с такой же ошибкой, буду очень благодарен за помошь
Уже не актуально. Я сделал маленький сервис который работает для меня:

import zlib from 'zlib';
import { Readable } from 'stream';
import concatStream from 'concat-stream';

export class GzipHelper {
 public decompress<T>(stream: Readable): Promise<T> {
 return new Promise((resolve, reject) => {
   stream
     .pipe(zlib.createGunzip())
     .on('error', reject)
     .pipe(
         concatStream((buf: Buffer) => {
           try {
             resolve(JSON.parse(buf.toString()));
          } catch (error) {                          
             reject(error);
          }
        })
      );
   });
  }
}

Использовал
transform stream
вместо буфера. В итоге всё равно буферизирую с помощью
concat-stream
, но теперь в буфере декомпрессированные данные и ошибки никакой нету. Если кто-то знает точно в чём проблема была в прошлом примере, буду благодарен, если просветите)
источник

☆Даня☆ in NodeUA - JavaScript and Node.js in Ukraine
Блин, не сильно понимаю о чем говоришь, я хоть и с Укр но не сильно тебя понимаю
источник