Nancy๋ ๋ง์(<10) ๋์ ์์ฒญ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์๋ฒ๊ฐ ์๋ Windows OS์์ ์ ์ฒด iis์ ๊ด๋ จ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๋ํด ๋น๋ช ์ ์ง๋ฅด๊ณ ์์ต๋๋ค. ์ด๋ค ๋ฒ์ ์ Windows/iis๋ฅผ ์คํํ๊ณ ์์ต๋๊น(์๋ ๊ฒฝ์ฐ)?
์ธ๊ธํ๋ ๊ฒ์ ์์์ต๋๋ค. ์ ๋ Microsoft.Owin.Host.HttpListener์ ํจ๊ป Selfhosting์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์๋๊น์?
OS๋ ์๋์ฐ 10์
๋๋ค.
์
ํํธ์คํ
์ ๊ฐ์ฅ ์ ํฉํ ์ต์
์ ๋ฌด์์
๋๊น?
์ ์ ์ฝํ ์ธ (๋๋ ๋ค๋ฅธ http ์๋ฒ)์ nginx๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ข์ ์ต์ ์ ๋๋ค.
@Kiri-rin nginx๊ฐ ์ ์ ์ฝํ ์ธ ์ ์๋ฒฝํ๋ค๋ ๋ฐ ๋์ํ๊ณ nancy๊ฐ API ๊ด๋ จ ํญ๋ชฉ์ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.
๊ธ์, ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ ํฌ๊ฑฐ๋ ์์ฑํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋น์ ์ ์ฝํ
์ธ ๋ ์๋ค๋ ๊ฒ์
๋๋ค.
๋๋ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ ์กฐ์ฌํ ๊ฒ์ด๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋์๊ฒ ๋ฌธ์ ๊ฐ ๋ ์์๋ ํํธ๋ฅผ ์ค ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
@cody82 ๊ฒฝ๋ก๊ฐ ์ค๋ ์คํ๋๋ ๊ฒฝ์ฐ ์์ฒญ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๋๋ก ๋น
์. ๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ๋ ๋ธ์์ ์ผ๋ฐ์ ์ธ HTTP ์์ฒญ ์ฒ๋ฆฌ๊ฐ ์๋๋ผ ๋น๋๊ธฐ๋ฅผ ์ ๋๋ก ์ฌ์ฉํ์ง ์๋ ์ ์ ํ์ผ ํธ๋ค๋ฌ์ ์๋ค๋ ๋ป์ธ๊ฐ์?
๋ํ ๋๋ถ๋ถ์ ์ฒ๋ฆฌ๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ์ํํ์ง๋ง ๋ชจ๋ ๊ฒ์ ์ฐจ๋จํ๋ ๋๊ธฐ์ Socket.Write ํจ์๋ฅผ ํธ์ถํ๋ ServiceStack์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ์ต๋๋ค.
GenericFileResponse.GetFileContent์ ๋ํ ๋ฌธ์ ๋ฅผ ์ถ์ ํ์ต๋๋ค.
c#
private static Action<Stream> GetFileContent(string filePath, long length)
{
return stream =>
{
using (var file = File.OpenRead(filePath))
{
file.CopyTo(stream, (int)(length < BufferSize ? length : BufferSize));
}
};
}
๋ฐ๋ผ์ File.CopyTo๋ ํ์ผ/๋น๋์ค๊ฐ ์ ์ก๋๋ ๋์ ์ค๋ ๋๋ฅผ ์ฐจ๋จํฉ๋๋ค.
(๋ํ ์ด ํด๋์ค๋ ๋ถ๋ถ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด์๋งค๋ฅผ ๋ง๋ค์ง ์์ง๋ง ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์
๋๋ค.)
์ด๊ฒ์ด ๋น๋๊ธฐ ํจ์๋ก ๋ณํ๋ ์ ์์์ง ์์ฌ๋์ง๋ง ๋ด๊ฐ ํ๋ฆด ์ ์์ต๋๊น?
(๋ํ ์ด ํด๋์ค๋ ๋ถ๋ถ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด์๋งค๋ฅผ ๋ง๋ค์ง ์์ง๋ง ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.)
@cody82 ๋น๋์ค/์ค๋์ค ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ PartialFileResponse๋ฅผ ๋ง๋ค์์ต๋๋ค: https://gist.github.com/danbarua/0fd9fcad5ec85e0c02dc
์ฝ๊ฐ์ ์ ๋ฆฌ๊ฐ ํ์ํ์ง๋ง Nancy์ ๋ณํฉ๋๊ฑฐ๋ GenericFileResponse์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ์ ์ฝํ ์ธ (๋๋ ๋ค๋ฅธ http ์๋ฒ)์ nginx๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ข์ ์ต์ ์ ๋๋ค.