Я строю простой TCP -сервер в node.js, чтобы получить большие файлы PDF от клиентов. Все работает нормально, когда я отправляю данные с одной и той же машины (Localhost) - я получаю большие куски 65536 байтов, и файл сохраняется почти мгновенно. медленное), хотя мое интернет -соединение хорошее (около 64 Мбит /с). < /p>
для того, чтобы быть специфическим: < /p>
Локальное соединение: кусочки ~ 65536 байт, общее время передачи ≈ 1 секунду < /p>
Удаленное соединение: кусочки ~ 1436. Упрощенная версия моего кода сервера TCP: < /p>
const net = require("net");
const crypto = require("crypto");
const fs = require("fs");
require("dotenv").config();
const server = net.createServer((socket) => {
socket.setNoDelay(true);
const chunks = [];
socket.on("data", (data) => {
chunks.push(data);
console.log(data.length); // 65536 for localhost, 1436 for remote clients.
if (data.toString("utf8").endsWith("DONE")) {
const bytes = Buffer.concat(chunks).slice(0, -(Buffer.from("DONE", "utf8").length));
console.log(bytes.length); // 20 MB
fs.writeFile(crypto.randomUUID() + ".bin", bytes, (err) => socket.write(JSON.stringify({ success: !err })));
}
});
});
server.listen(process.env.PORT, process.env.DEDICATED_SERVER_IPV4, () => console.log("Running..."));
< /code>
Вот более простая версия моего клиентского кода TCP: < /p>
const net = require("net");
const fs = require("fs");
require("dotenv").config();
fs.readFile("file.bin", (err, bytes) => {
if (!err) {
console.log(bytes.length); // 20 MB
const client = net.createConnection({ port: process.env.PORT, host: process.env.DEDICATED_SERVER_IPV4 }, () => {
client.write(bytes);
client.write("DONE");
});
client.on("data", (data) => console.log(data.toString()));
} else console.error(err.stack);
});
< /code>
Что я пробовал: < /p>
Увеличение Highwatermark до 1 мб. < /p>
называется socket.setnodelay (true), чтобы отключить алгоритм Nagle. Разница - это локальный против удаленного клиента. < /p>
Мои вопросы:
Почему Data.Length снижается до ~ 1436 байтов и является ли передача файла очень медленной, когда клиент удален? TCP -сервер для более быстрых больших загрузки файлов за удаленными подключениями?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... te-clients
Как повысить производительность TCP -сервера для больших загрузки файлов от удаленных клиентов? ⇐ Javascript
Форум по Javascript
1752769982
Anonymous
Я строю простой TCP -сервер в node.js, чтобы получить большие файлы PDF от клиентов. Все работает нормально, когда я отправляю данные с одной и той же машины (Localhost) - я получаю большие куски 65536 байтов, и файл сохраняется почти мгновенно. медленное), хотя мое интернет -соединение хорошее (около 64 Мбит /с). < /p>
для того, чтобы быть специфическим: < /p>
Локальное соединение: кусочки ~ 65536 байт, общее время передачи ≈ 1 секунду < /p>
Удаленное соединение: кусочки ~ 1436. Упрощенная версия моего кода сервера TCP: < /p>
const net = require("net");
const crypto = require("crypto");
const fs = require("fs");
require("dotenv").config();
const server = net.createServer((socket) => {
socket.setNoDelay(true);
const chunks = [];
socket.on("data", (data) => {
chunks.push(data);
console.log(data.length); // 65536 for localhost, 1436 for remote clients.
if (data.toString("utf8").endsWith("DONE")) {
const bytes = Buffer.concat(chunks).slice(0, -(Buffer.from("DONE", "utf8").length));
console.log(bytes.length); // 20 MB
fs.writeFile(crypto.randomUUID() + ".bin", bytes, (err) => socket.write(JSON.stringify({ success: !err })));
}
});
});
server.listen(process.env.PORT, process.env.DEDICATED_SERVER_IPV4, () => console.log("Running..."));
< /code>
Вот более простая версия моего клиентского кода TCP: < /p>
const net = require("net");
const fs = require("fs");
require("dotenv").config();
fs.readFile("file.bin", (err, bytes) => {
if (!err) {
console.log(bytes.length); // 20 MB
const client = net.createConnection({ port: process.env.PORT, host: process.env.DEDICATED_SERVER_IPV4 }, () => {
client.write(bytes);
client.write("DONE");
});
client.on("data", (data) => console.log(data.toString()));
} else console.error(err.stack);
});
< /code>
Что я пробовал: < /p>
Увеличение Highwatermark до 1 мб. < /p>
называется socket.setnodelay (true), чтобы отключить алгоритм Nagle. Разница - это локальный против удаленного клиента. < /p>
Мои вопросы:
Почему Data.Length снижается до ~ 1436 байтов и является ли передача файла очень медленной, когда клиент удален? TCP -сервер для более быстрых больших загрузки файлов за удаленными подключениями?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79705118/how-to-improve-tcp-server-performance-for-large-file-uploads-from-remote-clients[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия