forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Http-Сервер (Отправка файла) (http://forum.boolean.name/showthread.php?t=19924)

Gector 31.07.2015 15:57

Http-Сервер (Отправка файла)
 
Привет, булка! Делаю небольшое приложение с веб-мордой. Логика простая. У приложения есть небольшой самописный http-сервер, который получает из браузера запрос, и отправляет ответ в виде html-странички. Но есть вопрос: Как отправлять картинки, для оформления страницы в этом случае?

DStalk 31.07.2015 17:44

Ответ: Http-Сервер (Отправка файла)
 
Все картинки отправляются по отдельным запросам. Браузер принял HTML, посмотрел все сторонние ресурсы (js, css, картинки и т.п.) и по указанным ссылкам пустил отдельные запросы. Можно картинки хранить вообще на другом сайте...
Ну а сама передача картинки сервером - http-заголовки и за ним байт-код картинки в исходном виде (или как там это правильно называется, хз).:)

moka 31.07.2015 17:52

Ответ: Http-Сервер (Отправка файла)
 
Этим лучше пусть занимается web сервер, nginx или apache, сделай статик чек, например у nginx есть try_files - очень удобная штука.
Если файл не найден, тогда далее пытается уже файл скрипта исполнять.

Gector 31.07.2015 20:25

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298124)
Этим лучше пусть занимается web сервер, nginx или apache, сделай статик чек, например у nginx есть try_files - очень удобная штука.
Если файл не найден, тогда далее пытается уже файл скрипта исполнять.

Не). Ты не так понял. Есть относительно мелкое приложение, для которого интерфейс сделан через браузер. Поднимать полноценный сервак для маленького приложения - не целесообразно.

Gector 31.07.2015 20:41

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от DStalk (Сообщение 298123)
Все картинки отправляются по отдельным запросам. Браузер принял HTML, посмотрел все сторонние ресурсы (js, css, картинки и т.п.) и по указанным ссылкам пустил отдельные запросы. Можно картинки хранить вообще на другом сайте...
Ну а сама передача картинки сервером - http-заголовки и за ним байт-код картинки в исходном виде (или как там это правильно называется, хз).:)

Спасибо!) Я как раз пытался сделать так. Просто кое-где налажал и от этого запрос на картинку не приходил, вот и подумал что я не правильно понял).

moka 01.08.2015 23:01

Ответ: Http-Сервер (Отправка файла)
 
"поднимать сервер"?
yum install nginx - сервер поднят.
nodejs статик сервер пишется за 15 минут и без веб сервера тоже.

Gector 02.08.2015 11:37

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298139)
"поднимать сервер"?
yum install nginx - сервер поднят.
nodejs статик сервер пишется за 15 минут и без веб сервера тоже.

Интересно же и самому поковыряться). Кроме того на шарпе подобные вещи тоже можно написать за 15 минут, просто надо знать как.

moka 02.08.2015 22:41

Ответ: Http-Сервер (Отправка файла)
 
Шарп и его виртуальная машина тяжелее того же nginx..

Gector 03.08.2015 11:03

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298156)
Шарп и его виртуальная машина тяжелее того же nginx..

Да я понимаю). Но это для изучения языка.

Nikich 03.08.2015 14:34

Ответ: Http-Сервер (Отправка файла)
 
Если хочешь делать грамотно, не забывай про MIME и сжатие (gzip, deflate, sdch).

Gector 05.08.2015 10:45

Ответ: Http-Сервер (Отправка файла)
 
Эммм... Извиняюсь за тупняк, но я просто не совсем понял из примеров как переслать изображение. Как я понял разницы между пересылкой изображения и файла не много (разница только в значении MIME). Но как передать сам файл, я не совсем понимаю. В туторах говорят, что надо пересылать raw data. Но как записать его в ответ сервера? В смысле подготавливать к передаче.

moka 05.08.2015 12:21

Ответ: Http-Сервер (Отправка файла)
 
Вот тебе код, который сервит любые данные из директории public в корню директории с app.js файлом.
Поставь nodejs и npm, создай папку, затем cd в эту папку и поставь express молуль: npm install express
Затем создай app.js в этой папке с таким содержимым:

PHP код:

var http = require('http');
var 
express = require('express');

// catch exceptions and ignore them
// it is actually is a bad practice
process.on('uncaughtException', function(err) {
    
console.log(err);
});

var 
app express();

// bind static folder
app.use(express.static(__dirname '\public'));

// bind normal get /test request and response with test json
app.get('/test', function(reqresnext) {
    
res.json({ hello'world' });
});

// listen on port
var port 10001;
app.listen(port, function() { 
    
console.log('listening on port ' port);
}); 

Запускается так:
PHP код:

node app.js 


Кирпи4 05.08.2015 14:59

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298203)
Вот тебе код, который сервит любые данные из директории public в корню директории с app.js файлом.
Поставь nodejs и npm, создай папку, затем cd в эту папку и поставь express молуль: npm install express
Затем создай app.js в этой папке с таким содержимым

А ничего, что человек спрашивал про шарп, а ты лезешь со своим нодом?

moka 05.08.2015 15:58

Ответ: Http-Сервер (Отправка файла)
 
Он спросил изначально 31.07.2015. Сегодня уже 05.08.2015, это 5 дней спустя он не решил задачу.
Я загуглил, и написал мелкий скрипт за ~5 минут, и решил его задачу, также показал как хэндлить кодом запросы тоже.

Если бы его шарп решал бы отлично поставленную задачу, или была бы инфа - то думаю за 5 дней нашлось бы решение.

В отличии от тебя, я дал решение задачи. Ты лишь оффтопнул.

Кирпи4 05.08.2015 18:18

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298213)
Он спросил изначально 31.07.2015. Сегодня уже 05.08.2015, это 5 дней спустя он не решил задачу.
Я загуглил, и написал мелкий скрипт за ~5 минут, и решил его задачу, также показал как хэндлить кодом запросы тоже.

Если бы его шарп решал бы отлично поставленную задачу, или была бы инфа - то думаю за 5 дней нашлось бы решение.

В отличии от тебя, я дал решение задачи. Ты лишь оффтопнул.

А что если я скажу что я помог всё сделать, только в конторе?

Gector 05.08.2015 18:27

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298213)
Он спросил изначально 31.07.2015. Сегодня уже 05.08.2015, это 5 дней спустя он не решил задачу.
Я загуглил, и написал мелкий скрипт за ~5 минут, и решил его задачу, также показал как хэндлить кодом запросы тоже.

Если бы его шарп решал бы отлично поставленную задачу, или была бы инфа - то думаю за 5 дней нашлось бы решение.

В отличии от тебя, я дал решение задачи. Ты лишь оффтопнул.

Кхм... Вообще помог в вк действительно))).

Смысл был именно в том, чтобы не только написать приложение но и разобрать по полочкам сам процесс. 50% для дела 50% для самообразования.

И пять дней но не пять полных дней. В сущности только вчера сел за изучение.

А решение было простое. Для работы с файлами перевел StreamWriter в BinaryWriter. Не учел этот нюанс.

Всем спасибо).

h1dd3n 05.08.2015 21:30

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298156)
Шарп и его виртуальная машина тяжелее того же nginx..

написал moka и дал "решение" на node.js

Gector 05.08.2015 23:11

Ответ: Http-Сервер (Отправка файла)
 
Расслабьтесь бэтмены).

moka 06.08.2015 03:16

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от h1dd3n (Сообщение 298220)
написал moka и дал "решение" на node.js

V8 тяжелее CLR?

Зачем изобретать велосипеды с stream'ами, если можно использовать готовые решения?
В реальной ситуации, использование stream'ов ручками, оправдано лишь когда стандартные решения не имеют возможности застримить как нужно, по причине например: стримишь как прокси, или вообще стримишь не файлы, или что-то сложное. Но это идет с ценой.
Тот же например nginx, через который обычно раздают статичные файлы, занимается этим в разы эфективнее, и использует низкого уровня фичи платформы, чтобы иметь высшуют производительность.

По факту если тебе нужно тупо постримить статичные файлы, и ты это будешь "ручками" делать, то у тебя нормальное приложение загнется при даже 10% от нагрузки в отличии от того же nginx.
В продакшане в нормальных компаниях, за такое по рукам бьют.

St_AnGer 06.08.2015 09:57

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298233)
Зачем изобретать велосипеды с stream'ами, если можно использовать готовые решения?
В реальной ситуации, использование stream'ов ручками, оправдано лишь когда стандартные решения не имеют возможности застримить как нужно, по причине например: стримишь как прокси, или вообще стримишь не файлы, или что-то сложное.

Ну... Например что бы изучить "велосипед" изнутри и понять как он работает, обычно для этого изобретают такие "велосипеды". Речь идёт вроде не про реальную ситуацию, а как раз таки про изучение.

Node.js - это круто, но зачем вызывать экскаватор, что бы вскопать небольшую клумбу, тем более если человек хочет сам поработать?

Gector 06.08.2015 11:45

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298233)
V8 тяжелее CLR?

Зачем изобретать велосипеды с stream'ами, если можно использовать готовые решения?
В реальной ситуации, использование stream'ов ручками, оправдано лишь когда стандартные решения не имеют возможности застримить как нужно, по причине например: стримишь как прокси, или вообще стримишь не файлы, или что-то сложное. Но это идет с ценой.
Тот же например nginx, через который обычно раздают статичные файлы, занимается этим в разы эфективнее, и использует низкого уровня фичи платформы, чтобы иметь высшуют производительность.

По факту если тебе нужно тупо постримить статичные файлы, и ты это будешь "ручками" делать, то у тебя нормальное приложение загнется при даже 10% от нагрузки в отличии от того же nginx.
В продакшане в нормальных компаниях, за такое по рукам бьют.

Moka, ты в двух темах совершенно разный))). В одной надо избретать велосипеды, в другой не надо))).

Если бы я писал какой нибудь портал, то однозначно поставил бы nginx или апач. Но у меня задачи другие:
1. Юзаться будет только веб-морда. По той причине что html-страничка привычная и удобная вещь. И ее можно вообще в закладки добавить.
2. Разобраться в базовых приципах работы с сетью не будет лишним даже если я буду писать все на node.js. Верно? Пока на шарпе. Но пока и не принципиально.

Кроме того разбираться на практике с такими задачами довольно интересно. В частности я теперь имею более детальное представление о том как пишутся сервера, как устроен тот же nginx. И самое главное имею уже представление о том как можно делать и как нельзя. В инсте такому не научишься особо.

moka 06.08.2015 13:46

Ответ: Http-Сервер (Отправка файла)
 
В инсте не научишься если сам не занимаешься этим - это ты верно подметил.
weekend project - лучший вариант учить новые вещички изобретая велосипеды обычно, с немного более конкретной задачей, будет и результат.

Например Mr_F_ писал geom.io, изучал много чего, webgl, javascript, php, mysql. Немного дольше чем weekend project, но много велосипеда и много опыта он получил.

Велосипеды на самом деле ок для образования, ну тогда в таком случае нужно быть открытым к любой технологии, а не тыкать мол "спросили на этом языке, а ты даешь на другом".
Язык - для нормального разраба, это вообще мизерный фактор. Хороший разраб пишет на многих языках, и не будет ему проблем взять ранее не известный (ну кроме совсем замудренных), или новую либу и решить поставленную задачку.

Gector 06.08.2015 14:12

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298244)
weekend project ....

Вот оно как называется).

Цитата:

Сообщение от moka (Сообщение 298244)
Велосипеды на самом деле ок для образования, ну тогда в таком случае нужно быть открытым к любой технологии, а не тыкать мол "спросили на этом языке, а ты даешь на другом".
Язык - для нормального разраба, это вообще мизерный фактор. Хороший разраб пишет на многих языках, и не будет ему проблем взять ранее не известный (ну кроме совсем замудренных), или новую либу и решить поставленную задачку.

Не спорю. Открытым быть нужно. Но правда в данном случае я интересовался именно базовыми принципами передачи данных. Тред скорее не про http-сервер для решения какой-то задачи, а про то как он с взаимодействует с браузером в принципе.

moka 06.08.2015 15:08

Ответ: Http-Сервер (Отправка файла)
 
Ну тогда ты уже примерно знаешь:

Броузер создает TCP соединение с сервером и шлет header (plain-text).
Далее сервер обрабатывает заголовок и исходя из того что в нем описано и что ожидает броузер делает решение. Ответом должен быть также заголовок со статусом и сразу после него возможно данные в сыром виде, длиной как указано в заголовке или если это octet-stream, то тупо stream данных до закрытия соединения.

h1dd3n 06.08.2015 23:45

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298233)
V8 тяжелее CLR?

Зачем изобретать велосипеды с stream'ами, если можно использовать готовые решения?
В реальной ситуации, использование stream'ов ручками, оправдано лишь когда стандартные решения не имеют возможности застримить как нужно, по причине например: стримишь как прокси, или вообще стримишь не файлы, или что-то сложное. Но это идет с ценой.
Тот же например nginx, через который обычно раздают статичные файлы, занимается этим в разы эфективнее, и использует низкого уровня фичи платформы, чтобы иметь высшуют производительность.

Во-первых, да, я на 100% уверен что CPU-intensive код на C# будет работать быстрее на .net clr, чем js на v8 и что в общем случае у разработчика на C# больше возможностей рационального использования памяти и многоядерной архитектуры, чем у разработчика на js.
Во-вторых я на 100% уверен что сравнение "V8 vs CLR" не имеет никакого отношения к "производительность отдачи статики на node.js vs производительность отдачи статики на C#".
В-третьих я специально слово решение написал в кавычках, поскольку это не решение а какой-то пздц. Ты мало того что привел пример на node.js дак еще и в коде никак вообще не показал каким же все-таки образом файлы с диска на сервере появляются в браузере на клиенте. Ты тупо заюзал готовый фреймворк у которого есть функция "обработатьСтатическиеФайлы". Примерная аналогия:
XXX: У меня есть приложение на node.js, но я никак понять не могу как запаковать файл в zip архив и отправить на клиент ?
moka: вот код на C# (ASP.NET MVC):
Код:

public class HomeController : Controller
{
        [HttpGet]
        public ActionResult Index()
        {
                return ZippedFileResult("C:\\somefile.txt");
        }
}

Код намеренно утрирован, чтобы тебе было проще понять почему твой ответ не ок.

И что самое то интересное мой пост был вообще не о сравнении clr и v8 и не о сравнении node.js и C#. Ты написал что C#/clr тяжелее того же nginx (другими словами nginx справится лучше), но тут же даешь решение на node.js.
То есть тормозное (по сравнению с nginx) решение на C# - это плохо и неправильно, а тормозное (по сравнению с nginx) решение на node.js/express это вдруг внезапно збс и вообще нормально. Так?

Gector,
Как я понимаю ты руками принимаешь соединения и пишешь в response. Для понимания основ это хорошо, однако это может сильно сбить тебя с толку... Думаю ты в конце концов хочешь получить какие-нибудь практические знания/навыки, чтобы использовать их в работе. C# это не только язык для "старта", на C# написано огромное количество веб-приложений (преимущественно в enterprise секторе) и веб-сервисов. Если хочешь как-то дальше развиваться настоятельно рекомендую взять веб-фреймворк. Сможешь хотя бы познакомиться с общепринятыми подходами к разработке, подглядеть удачные решения и т.д. Предпочтительно ASP.NET MVC, но если он кажется монструозным, то можно и Nancy. Во фреймворках принято разделять ответственность приложения и http-сервера. То есть прослушиванием порта и обработкой сетевых соединений занимается http-сервер, запросами в базу и формированием html страницы занимается приложение. Тебе совсем не обязательно ставить апач или nginx (я бы даже сказал не рекомендуется использовать эти сервера для .net веб-приложений). У винды есть IIS. Он прекрасно работает в продакшене, а уж для "попробовать" его хватит тем более. Изучив хотя бы основы разработки с aspnet mvc уже можешь претендовать на юниора - поверь мне спрос на хотя бы что-то понимающих юниоров довольно большой.

moka 07.08.2015 15:15

Ответ: Http-Сервер (Отправка файла)
 
Взорвало?
Задача была поставлена, решение дано. А ты новеллу пишешь тут лол.
Я производительность js кода на v8 с c# на clr и не сравнивал, тебя уносит.

h1dd3n 07.08.2015 19:03

Ответ: Http-Сервер (Отправка файла)
 
Цитата:

Сообщение от moka (Сообщение 298286)
Взорвало?
Задача была поставлена, решение дано. А ты новеллу пишешь тут лол.

У тебя дислексия , да? Ты никак не можешь прочитать в моем посте почему твое решение не решение вовсе? Не надо повторять что ты дал решение, поскольку это не так. Прочитай мой ответ еще раз, для понимания.
Цитата:

Я производительность js кода на v8 с c# на clr и не сравнивал, тебя уносит.
Да у тебя неадекват головного мозга...
#8 moka: Шарп и его виртуальная машина тяжелее того же nginx..
#17 h1dd3n: написал moka и дал "решение" на node.js
#19 moka: V8 тяжелее CLR?
#25 h1dd3n: Во-первых, да, я на 100% уверен что CPU-intensive код на C# будет работать быстрее на .net clr, чем js на v8 и что в общем случае у разработчика на C# больше возможностей рационального использования памяти и многоядерной архитектуры, чем у разработчика на js.
Во-вторых я на 100% уверен что сравнение "V8 vs CLR" не имеет никакого отношения к "производительность отдачи статики на node.js vs производительность отдачи статики на C#".
......
И что самое то интересное мой пост был вообще не о сравнении clr и v8 и не о сравнении node.js и C#. Ты написал что C#/clr тяжелее того же nginx (другими словами nginx справится лучше), но тут же даешь решение на node.js.
То есть тормозное (по сравнению с nginx) решение на C# - это плохо и неправильно, а тормозное (по сравнению с nginx) решение на node.js/express это вдруг внезапно збс и вообще нормально. Так?

#26 moka: Я производительность js кода на v8 с c# на clr и не сравнивал, тебя уносит.

Специально выделил жирным интересные места, поскольку у тебя, очевидно, проблемы с чтением.

moka 07.08.2015 19:44

Ответ: Http-Сервер (Отправка файла)
 
Проблемы с чтением. Ок.
Бугуртим дальше.


Часовой пояс GMT +4, время: 19:36.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot