डिफ़ॉल्ट एरलांग स्थापना का उपयोग करना वेब सर्वर उत्पादक "हैलो वर्ल्ड" बनाने के लिए आवश्यक न्यूनतम कोड क्या है?एरलांग में एक साधारण वेबसर्वर कैसे लिखें?
उत्तर
शाब्दिक रूप से "उत्पादन" लेना, यहां एक बहुत छोटा है। यह अनुरोध भी नहीं पढ़ता है (लेकिन हर अनुरोध पर कांटा करता है, इसलिए यह न्यूनतम संभव नहीं है)।
-module(hello).
-export([start/1]).
start(Port) ->
spawn(fun() -> {ok, Sock} = gen_tcp:listen(Port, [{active, false}]),
loop(Sock) end).
loop(Sock) ->
{ok, Conn} = gen_tcp:accept(Sock),
Handler = spawn(fun() -> handle(Conn) end),
gen_tcp:controlling_process(Conn, Handler),
loop(Sock).
handle(Conn) ->
gen_tcp:send(Conn, response("Hello World")),
gen_tcp:close(Conn).
response(Str) ->
B = iolist_to_binary(Str),
iolist_to_binary(
io_lib:fwrite(
"HTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: ~p\n\n~s",
[size(B), B])).
'head_tcp' के 'विकल्प' के लिए '{पैकेट, http}' देखें, HTTP शीर्षलेख डीकोडिंग के लिए सुनो '। – Pindatjuh
मैं इस कोड को देख रहा था, और भले ही यह साफ दिखता है, मुझे एक समस्या मिली। अपाचे बेंच के साथ इसका परीक्षण करते समय, मुझे एक 'apr_socket_recv मिलता है: सहकर्मी द्वारा कनेक्शन रीसेट (104) '। ब्राउज़र में पहुंचने या कर्ल का उपयोग करते समय यह ठीक काम करता है। क्या आपको कोई विचार है कि यह क्यों है? –
@MartinKristiansen लाइन को हटाएं 'gen_tcp: बंद करें (कॉन)। –
क्या आप वास्तव में एरलांग में एक वेब सर्वर लिखना चाहते हैं, या आप एक एरलांग वेब सर्वर चाहते हैं ताकि आप एरलांग का उपयोग करके गतिशील वेब सामग्री बना सकें?
यदि बाद वाला, YAWS आज़माएं। यदि पूर्व, YAWS source code पर प्रेरणा
मैं गतिशील सामग्री बनाना चाहता हूं, लेकिन सिर्फ वेब सर्वर के लिए आवश्यक न्यूनतम न्यूनतम जानना चाहता था। मैंने यॉस स्रोत कोड को देखा और मेरी पहली छाप यह थी कि बहुत सारे कोड की आवश्यकता थी। – Zubair
केवल निर्मित पुस्तकालयों का उपयोग कर वेब सर्वर के लिए inets http_server देखें। जब कुछ और शक्ति की आवश्यकता होती है लेकिन अभी भी सादगी के साथ आपको mochiweb लाइब्रेरी की जांच करनी चाहिए। आप लोड कोड उदाहरण के लिए Google कर सकते हैं।
बहुत अच्छा है, इसलिए आईनेट्स का उपयोग करके मैं एक मॉड्यूल वेबसर्वर लिख सकता हूं? – Zubair
शोकहारा क्षुधा या इस तरह के gen_webserver व्यवहार की जाँच के निर्माण के लिए एक बहुत उपयोग करने में आसान वेब सर्वर के लिए: http://github.com/martinjlogan/gen_web_server।
फेलिक्स के उत्तर के लिए बस एक फिक्स और यह मार्टिन देख रहे मुद्दों को संबोधित करता है। सॉकेट बंद करने से पहले, क्लाइंट से भेजे गए सभी डेटा प्राप्त किए जाने चाहिए (उदाहरण के लिए do_recv
gen_tcp description से)।
अन्यथा सॉकेट बंद होने से पहले HTTP अनुरोध भेजने के लिए HTTP अनुरोध भेजने के लिए ब्राउजर/प्रॉक्सी के लिए दौड़ की स्थिति है।
एक और तरीका, ऊपर gen_tcp
उदाहरण के समान है लेकिन कम कोड के साथ और पहले से ही एक सुझाव के रूप में पेश किया गया है, inets library का उपयोग कर रहा है।
%%%
%%% A simple "Hello, world" server in the Erlang.
%%%
-module(hello_erlang).
-export([
main/1,
run_server/0,
start/0
]).
main(_) ->
start(),
receive
stop -> ok
end.
run_server() ->
ok = inets:start(),
{ok, _} = inets:start(httpd, [
{port, 0},
{server_name, "hello_erlang"},
{server_root, "/tmp"},
{document_root, "/tmp"},
{bind_address, "localhost"}
]).
start() -> run_server().
ध्यान रखें, यह आपकी /tmp
निर्देशिका का खुलासा करता है।
चलाने के लिए, बस:
$ escript ./hello_erlang.erl
- 1. सी ++ में एक साधारण कक्षा कैसे लिखें?
- 2. एक साधारण बिट्टोरेंट एप्लिकेशन कैसे लिखें?
- 3. एरलांग पढ़ें stdin लिखें stdout
- 4. एक साधारण PUT अद्यतन के लिए आरएसपीसी परीक्षण कैसे लिखें?
- 5. एरलांग: टेक्स्ट आउटपुट में मेरे आउटपुट कैसे लिखें?
- 6. एक्सएएमएल में एक साधारण हाइपरलिंक कैसे बनाएं?
- 7. एक लिटर कैसे लिखें?
- 8. एक दुभाषिया कैसे लिखें?
- 9. एक लिंकर कैसे लिखें
- 10. एक अच्छा मल्टीथ्रेडेड पायथन वेबसर्वर?
- 11. वेबसर्वर एक "पथ बार" पीएनजी
- 12. जावास्क्रिप्ट वेबसर्वर
- 13. फ़ाइल को वेबसर्वर
- 14. किसी वेबसर्वर
- 15. एक पार्सल में नक्शा कैसे लिखें?
- 16. आईएसएपीआई प्लगइन कैसे लिखें?
- 17. एक साधारण निर्भरता एल्गोरिदम
- 18. एक आरईएसटी एपीआई कैसे लिखें?
- 19. एक साधारण एक्सएमएल
- 20. एरलांग
- 21. एरलांग: gen_fsm
- 22. एक जेआईटी पुस्तकालय कैसे लिखें?
- 23. एरलांग
- 24. एरलांग
- 25. किसी आईओएस डिवाइस पर एक वेबसर्वर चलाएं
- 26. सुरक्षा के साथ एक आरईएसटी वेबसर्वर बनाना
- 27. एरलांग
- 28. एक साधारण दुभाषिया
- 29. एक साधारण रीस्टफुल एपीआई
- 30. एक साधारण जावा स्पाइडर
यह कैसे http://stackoverflow.com/questions/2084639/sinatra-style-web-framework-for-erlang से अलग है? – Zed
@Zed, जुबैर एक न्यूनतम "हैलो वर्ल्ड" सर्वर मांग रहा है - इसमें एक "पृष्ठ" है क्योंकि यह न्यूनतम है। आपके द्वारा लिंक किया गया प्रश्न पूछता है कि कैसे एक कार्यात्मक वेब ऐप बनाना है (एक पृष्ठ, लेकिन विभिन्न तरीकों से विभिन्न अनुरोधों का जवाब देता है)। मुझे लगता है कि बाद वाला अजाक्स-वाई होगा। – apollodude217