首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能从finagle客户端发出请求?

我怎样才能从finagle客户端发出请求?
EN

Stack Overflow用户
提问于 2015-03-20 12:14:08
回答 1查看 3.7K关注 0票数 2

我开始使用Finagle服务器(twitter/finagle):

代码语言:javascript
复制
import com.twitter.finagle.{Http, Service}
import com.twitter.util.{Await, Future}
import java.net.InetSocketAddress
import org.jboss.netty.handler.codec.http._

object Server extends App {
  val service = new Service[HttpRequest, HttpResponse] {
    def apply(req: HttpRequest): Future[HttpResponse] =
      Future.value(new DefaultHttpResponse(
        req.getProtocolVersion, HttpResponseStatus.OK))
  }
  val server = Http.serve(":8080", service)
  Await.ready(server)
}

客户端(twitter/finagle):

代码语言:javascript
复制
import com.twitter.finagle.{Http, Service}
import com.twitter.util.{Await, Future}
import java.net.InetSocketAddress
import org.jboss.netty.handler.codec.http._

object Client extends App {
  val client: Service[HttpRequest, HttpResponse] =
    Http.newService("localhost:8080")
  val request =  new DefaultHttpRequest(
    HttpVersion.HTTP_1_1, HttpMethod.GET, "/")
  val response: Future[HttpResponse] = client(request)
  response onSuccess { resp: HttpResponse =>
    println("GET success: " + resp)
  }
  Await.ready(response)
}

如何将像Map("data_id" -> 5)这样的数据从客户机发送到服务器?在服务器上我能收到它吗?我必须向服务器添加回调吗?

我没有通过搜索找到它。如果你能给我一个例子的链接,那就足够了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 15:04:48

Finagle是一个非常薄的图书馆。这意味着你必须自己来处理大部分的“魔法”。

要使用来自客户端的参数进行请求,我使用以下帮助方法:

代码语言:javascript
复制
  def buildUri(base: String, path: String, params: Map[String, String] = Map.empty): String = {
    val p = if (params.isEmpty) ""
    else params map { case (k,v) => urlEncode(k) + "=" + urlEncode(v) } mkString ("?", "&", "")
    base + path + p
  }

  def urlEncode(url: String): String = URLEncoder.encode(url, "UTF-8")

然后我就这样叫它:

代码语言:javascript
复制
val url = buildUri(baseAddress, path, defaultParams ++ params)
val req = RequestBuilder().url(url).setHeader("Accept", "*/*").buildGet
client(req)

至于服务器,您必须完成基本相同的操作,并手动解析参数。要么使用java.net.URI,要么使用org.jboss.netty.handler.codec.http.QueryStringDecoder

当然,您也可以使用URIQueryStringEncoder进行编码,而不是使用我的助手方法。

尽管如此,如果您想在更高的级别上这样做,您可以在Finagle上面使用以下库之一:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29166272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档