Clojure-na 네트워크 통신 루프

9997 단어 ringclojureweb
Ringéuma biblioteca baseada no WSGI do Python no Rack do Ruby que nos ajuda na criaço de aplicações web em Clojure,abstraindo os detalhes do HTTP.이것은 인프라 시설로 인류 네트워크에 응용할 수 있는 도서관으로 HTTP://wwww.poisele trabalha.com/baixo n 涉vel das requisi ões에서 사용할 수 있다.Ring possui tryers conceitos principais: 프로세서, 어댑터 e 중간부품.

처리자


일종의 수요로서, 우리는 정확한 지휘자가 필요하고, 우리는 정확한 반응이 필요하다.정보의 연속성을 확보하기 위해 보고서가 필요합니다.

안규시온


우리가 필요로 하는 정보는 다음과 같다. 원칙적인 정보:
  • : 서버 포트: Porta do servidor que estárecebendo a requisi ão
  • : 서버 이름: Nome ou IP do servidor que estárecebendo a requisi ão
  • : 쿼리 문자열: 쿼리 문자열da requisiço(?q=name)
  • : 요청 방법: Método HTTP utilizado na requisiço(:post,:get 등)
  • : 본문: Corpo da requisiço
  • : 제목: 필수 제목
  • Resposta


    Dell의 대응 방안은 다음과 같습니다.
  • : 본문: Corpo da resposta
  • : 제목: 제목: 제목: 내용 및 내용에 대한 응답
  • : 상태: 응답 상태(200404500 등)
  • 어댑터


    이 어댑터는 aplicaço Ring과protocolo HTTP가 디테일을 실현하는 중심이다.O 어댑터가 요청을 받아 요청을 프로세스로 전환합니다.Após processar o mapa recebido, aplica çço Ring Retrona um mapa de resposta que éusado pelo adapter para Retronar a resposta HTTP.
    Alguns 어댑터 예:
  • Jetty
  • Apache HttpCore
  • 중간부품


    중간부품은 형식과 요구 절차를 바꿀 수 있습니다.Middleware s Utilizados para Amplier는 기능적인dos 프로세서입니다.우리의 중간 장치는 처리자와 운영자, 처리자, 그리고 새로운 처리자의 새로운 구성 요소이다.중간 제품의 실용성을 증명할 수 있는 예는 하나도 없다.

    Criando um projeto com Ring


    서비스 센터nosso caso, utilizaremos o Leiningen para a criaço do projeto가 없습니다.Leiningen, acesse osite 및 siga as instru es.Após instalar o Leiningen, o seguinte comando no seu 터미널을 실행합니다.
    * 라이언: 새로운 안녕 반지
    이것은 독립된 항목입니다.

    이것은 중요한 순간이다.
  • 파일: Diretório ondeécolocada a documentaço do projeto
  • src:Diretório onde fica o código fonte do projeto
  • 테스트: Diretório onde ficam os testes
  • 프로젝트.clj:Arquivo responseável por toda configuraço do projeto(semelhante ao pom.xml de projetos Java com Maven)
  • Abra o arquivo 프로젝트clj.자, 아레모스 아디시오난도 노바스 파라오 프레지토.검토자 없음: 종속, adicione duas Dependent encias do Ring:
    :dependencies [[org.clojure/clojure "1.10.0"]
                   ; principais funções do Ring
                   [ring/ring-core "1.8.1"]
                   ; adapter Jetty para Ring
                   [ring/ring-jety-adapter "1.8.1"]]
    
    아디스 아디시오날은 레닌겐 지역에서 사형을 집행한다.
    * 라이언 뎁스
    Agora,abra o arquivo core.clj que estádentro do diretório src/hello_ring.Nesse arquivo temos a declaraço do namespace hello ring.core a importaço do adapter do servidor 부두.
    (ns hello-ring.core
      (:require [ring.adapter.jetty :as jetty]))
    
    Vamos adicionar nosso primeiro handler que Retronaráum mapa como resposta contendo o status,o corpo da Requisitiço e um header de Content Type.
    (defn ola-web [request]
      {:status 200
       :body "Olá web"
       :headers {"Content-Type" "text/plain; charset=utf-8"}})
    
    폴 핌(Por fim), 크리아 모스 우마 핀사노 차마다(criamos uma funço chamada) - 레닌겐의 주요 도시.Dentro da função main,iniciamos o servidor Jetty associando a ele o handler(ola web)e um mapa com a configuraço da porta(3000).
    (ns hello-ring.core
      (:require [ring.adapter.jetty :as jetty]))
    
    (defn ola-web [request]
      {:status 200
       :body "Olá web"
       :headers {"Content-Type" "text/plain; charset=utf-8"}})
    
    (defn -main [& args]
      (jetty/run-jetty ola-web {:port 3000}))
    
    파라니실리자 o servidor pelo 부두,precisamos fazer uma configura çço a mais.Abra o arquivo 프로젝트clj e adicione uma linha(:main hello ring.core)para dizer ao Leiningen que o projeto inicializarápelo namespace hello ring.아틀라비스타 팡ço 핵심 호텔
    (defproject hello-ring "0.1.0-SNAPSHOT"
      :description "FIXME: write description"
      :url "http://example.com/FIXME"
      :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
                :url "https://www.eclipse.org/legal/epl-2.0/"}
      :dependencies [[org.clojure/clojure "1.10.0"]
                     [ring/ring-core "1.8.1"]
                     [ring/ring-jetty-adapter "1.8.1"]]
      :main hello-ring.core
      :repl-options {:init-ns hello-ring.core})
    
    Agora,abra Novatement o terminal e execute o comando para Incializer o projeto.
    * 라이언 윤
    O servidor seráinicializado.Abra o navegador e digite 로컬 호스트: 3000.mostrada mensagem "Oláweb"을 개발합니다.

    Criando um 중간부품


    Criaremos um middleware que adicionaraáa chave: 쿼리 매개변수 ao header da requisiço com os dados daquery string.
    (defn parse-query
      "Transforma a query-string em um mapa de parâmetros"
      [query-string]
      (if (> (count query-string) 0)
        (apply hash-map (str/split query-string #"[&=]"))))
    
    (defn wrap-query-param
      "Adiciona a chave :query-param ao header da requisição"
      [handler]
      (fn [request]
        (let [query-param (parse-query (:query-string request))
              nova-req (assoc request :query-params query-param)]
          (handler nova-req))))
    
    "código acima"가 없고, criamos a funço parse query responseável por quebrar ospar –metros da requisi ço criar ummapa de chave/valor.Nosso 중간부품(wrap query param) captura ospar - metros, recebe o mapa criado pela fun ão Fronter e Association esse mapa requisi ã o atual, criando uma nova requisi ã o e passando - para o handler recebido como par - metro 중간부품.
    Para utilizar nosso middleware,passamos nosso handler como par–metro Para ele,que por sua vez,épassado como par–metro Para funão que cria o servidor.
    (defn -main [& args]
      (jetty/run-jetty (wrap-query-param ola-web) {:port 3000}))
    
    또 다른 사이트는 한 남자의 도시다.Abaixo código completo:
    (ns hello-ring.core
      (:require [ring.adapter.jetty :as jetty]
                [clojure.string :as str]))
    
    (defn ola-web [request]
      (let [nome (get (:query-params request) "nome")]
        {:status 200
         :body (str "Olá " nome)
         :headers {"Content-Type" "text/plain; charset=utf-8"}}))
    
    (defn parse-query
      "Transforma a query-string em um mapa de parâmetros"
      [query-string]
      (if (> (count query-string) 0)
        (apply hash-map (str/split query-string #"[&=]"))))
    
    (defn wrap-query-param
      "Adiciona a chave :query-param ao header da requisição"
      [handler]
      (fn [request]
        (let [query-param (parse-query (:query-string request))
              nova-req (assoc request :query-params query-param)]
          (handler nova-req))))
    
    (defn -main [& args]
      (jetty/run-jetty (wrap-query-param ola-web) {:port 3000}))
    
    코만도 파라소빌 슈비도르의 새로운 협의를 집행하다.
    * 라이언 윤
    navegador 없음, digite 로컬 호스트: 3000/?nome=Guillerme e veja o resultado.

    Utilizando um 중간부품을 곧 사용할 수 있습니다.


    Agora utilizaremos dois Middleware existentes.Um vai capturar os dados da query string como fizemos no nosso 중간부품 e o outro retronaráos dados da requisiço como JSON.Abra o arquivo 프로젝트clj e adicione a seguinteência responseável pelo middleware de JSON:
    *[ring/ring json“0.5.0”]
    반지 없어요.core, vamos adicionar는 Dependent encias dos dois middleware, sendo o o wrap params pertencente e는 biblioteca ring core e o wrap json response e는 biblioteca ring json입니다.
    (ns hello-ring.core
      (:require [ring.adapter.jetty :as jetty]
                [ring.middleware.params :refer [wrap-params]]
                [ring.middleware.json :refer [wrap-json-response]]))
    
    (defn ola-web [request]
      (let [nome (get (:query-params request) "nome")]
        {:status 200
         :body {:nome nome}
         :headers {}}))
    
    (defn -main [& args]
      (jetty/run-jetty
        (-> ola-web
            wrap-params
            wrap-json-response)
        {:port 3000}))
    
    서비스업에 대한 어떠한 다른 의견도 없다.Utilizamos uma 스레드First para processar nosso handler utilizando os dois Middleware.우선, 우리는 형식과 형식의 정보 처리 과정에서 새로운 형식을 형성해야 한다. 이것은 새로운 형식이다.Nesse caso,passamos nosso handler como par–metro para o middleware wrap params e o resultado do returno desse middlewareépassado como par–metro para o middleware de baixo(wrap json response).
    코만도 파라소빌 슈비도르의 새로운 협의를 집행하다.
    * 라이언 윤
    navegador 없음, digite 로컬 호스트: 3000/?짐 = 짐.O resultadoémostrado no formato JSON.
    Podemos melhorar o Retrono do nosso handler adicionando uma biblioteca para utilizar os métodos HTTP.arquivo 프로젝트가 없습니다.clj,adicione a Dependencia abaixo:
    *[metosin/ring http 응답 "0.9.1"]
    전화벨이 없어요.core,adicione a dependencia do http response para a utilizaoço da funço ok.Passamos o mesmo mapa a funão ok,que Retronaráo status 200 juntamente com o corpo da resposta.
    (ns hello-ring.core
      (:require [ring.adapter.jetty :as jetty]
                [ring.middleware.params :refer [wrap-params]]
                [ring.middleware.json :refer [wrap-json-response]]
                [ring.util.http-response :refer [ok]]))
    
    (defn ola-web [request]
      (let [nome (get (:query-params request) "nome")]
        (ok {:nome nome})))
    
    (defn -main [& args]
      (jetty/run-jetty
        (-> ola-web
            wrap-params
            wrap-json-response)
        {:port 3000}))
    
    이것은 잠재력이 있는 도서관으로 인터넷에서 조회할 수도 있고, 인터넷에서 조회할 수도 있으며, 인터넷에서 조회할 수도 있다.2위(플로시모포스트)

    좋은 웹페이지 즐겨찾기