- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 HTTPBuilder 为 NoSQL 数据库的 REST API 构建客户端。除了处理大型数据集时,它工作正常。大量调用后,客户端抛出此异常:
java.net.SocketException: No buffer space available (maximum connections reached?): connect
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:446)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:417)
at groovyx.net.http.HTTPBuilder.request(HTTPBuilder.java:366)
at groovyx.net.http.HTTPBuilder$request.call(Unknown Source)
at scripts.groovy.prototypes.NeoClient.getRelationship(NeoClient.groovy:70)
at com.gsgenetics.genie.trait.Node$Edge.getTargetNode(Node.java:108)
at com.gsgenetics.genie.trait.Node$Edge.compareTo(Node.java:145)
at com.gsgenetics.genie.trait.Node$Edge.compareTo(Node.java:67)
at com.gsgenetics.genie.trait.Node.getEdges(Node.java:32)
at com.gsgenetics.genie.trait.Node.iterator(Node.java:384)
at com.gsgenetics.genie.GenomeStructuredGraph.add(GenomeStructuredGraph.java:131)
at com.gsgenetics.genie.GenomeStructuredGraph.add(GenomeStructuredGraph.java:197)
at com.gsgenetics.genie.GenomeStructuredGraph$add.call(Unknown Source)
at scripts.groovy.prototypes.read-ccds$_run_closure3.doCall(read-ccds.groovy:53)
at scripts.groovy.prototypes.read-ccds.run(read-ccds.groovy:50)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
import groovyx.net.http.*
import net.sf.json.JSONArray
import net.sf.json.JSONObject
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
class NeoClient {
static final URL = 'http://some IP address'
// static def http = new HTTPBuilder( URL )
static net.sf.json.JSONObject query(statement, params=null, success=null, error=null) {
def http = new HTTPBuilder( URL )
net.sf.json.JSONObject returnJson = []
http.request( POST, JSON ) {
uri.path = '/db/data/cypher/'
headers.'X-Stream' = 'true'
requestContentType = JSON
body = [ query : statement , params : params ?: [:] ]
response.success = { resp, json ->
if (success) success(json)
else {
println "Status ${resp.statusLine} Columns ${json.columns}\nData: ${json.data}"
}
returnJson = json
}
response.failure = { resp, message ->
def result=[status:resp.statusLine.statusCode,statusText:resp.statusLine.reasonPhrase]
result.headers = resp.headers.collect { h -> [ (h.name) : h.value ] }
result.message = message
if (error) {
error(result)
} else {
println "Status: ${result.status} : ${result.statusText} "
println "Headers: ${result.headers}"
println "Message: ${result.message}"
}
throw new Exception("Neo Client Exception");
}
}
}
}
最佳答案
您应该使用 HTTPBuilder.shutdown用于释放此实例持有的任何系统资源的方法。
另外,新建HTTPBuilder
对于每个请求,在性能和资源管理方面并不是最好的方法。更好的方法可以是使用 HttpBuilder
的单个实例。它处理多个请求。为此,您需要覆盖 HttpBuilder
的默认行为。使用线程安全的连接管理器:
private static class CustomHttpBuilder extends HttpBuilder {
protected AbstractHttpClient createClient( HttpParams params ) {
def connManager = new MultiThreadedHttpConnectionManager()
def connManagerParams = new HttpConnectionManagerParams()
connManagerParams.maxTotalConnections = 50 // default is 20
connManagerParams.defaultMaxConnectionsPerHost = 50 // default is 2
connManager.params = connManagerParams
new HttpClient(connManager)
}
}
CustomHttpBuilder
的单个实例。对于多个请求。
关于java - 使用 HTTPBuilder 并获取 "java.net.SocketException: No buffer space available (maximum connections reached?): connect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873287/
可能是发布这个的错误地方,但我一直在摆弄异步http构建器,试图让基本的密码查询工作。它可以与 Http Builders 一起使用,但无法使其与异步版本一起使用。 @Grab(group='o
我正在尝试安装 HTTPBuilder像这样: @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder
我试图了解 HTTP Builder 的简化 GET。我通过类似于 REST GET 请求的简单 GET 请求成功了。 def client = new HTTPBuilder('http://pok
我正在尝试使用 Groovy HTTPBuilder 编写一个集成测试,该测试将验证正文中是否返回正确的错误消息以及 HTTP 409 状态消息。但是,我无法弄清楚如何在失败的情况下实际访问 HTTP
嗨,我想知道如何发布一个urlencoded字符串并使用HTTPBuilder读取xml响应?我想在Grails应用程序中使用它。 REST插件是不可选项。我尝试了在http://groovy.cod
我正在使用以下代码对外部系统执行 HTTP POST。问题是外部系统在使用下面的代码时总是得到一个“空”内容类型。有没有办法在使用 HTTPBuilder 时设置内容类型。 我尝试了执行相同请求的其他
以下代码不会对用户进行身份验证(没有发生身份验证失败,但由于缺乏权限导致调用失败): def remote = new HTTPBuilder("http://example.com") remote
我的httpbuilder帖子和json的响应处理遇到一些问题 在我的服务范围内,我有: def jsonDataToPost = '{"accountNumber" : ' + accNo + ',
我想与具有基于URL的API的Web服务进行通信。例如,我有以下URL: http://api.bla.com/aaa/bbb.ashx?Action=GetSecurityToken&vendorI
我试图使用httpBuilder在groovy中构建一个api使用者。我的后端api返回内容类型为application / json的json输出。但是,当我将httpbuilder对象中的内容类型
是 HTTPBuilder在 Grails 中线程安全吗? 如果 HTTPBuilder 连接到 Grails 服务类,使用它是否安全?还是应该在每次调用时实例化? 关于 Grails 中的 HTTP
为什么某些导入适用于项目中的常规 groovy 文件 compile group: 'org.codehaus.groovy.modules.http-builder', name: 'http-bu
我一直在使用HTTPBuilder作为获取站点 HTML 内容的一种方式。例如,这就是我使用它的方式: def http = new HTTPBuilder(url) def root = http.
def login(String email, String password, String apiKey) throws HttpResponseException { def postB
我需要通过代理才能到达我的目标服务器。看来我可以用这样的代码来做到这一点: def http = new HTTPBuilder( 'http://www.somesite.com') http.se
这个问题与 this question 密切相关.不同之处在于我想遵循模拟客户端的推荐方法。因此,我定义了以下 HTTPBuilder: protected readUrl() { def h
我正在尝试发出一个简单的 HTTP POST 请求,但我不知道为什么以下失败。我尝试按照示例 here ,而且我不明白我哪里出错了。 异常 java.lang.NullPointerException
我有一些 HTTPBuilder 代码的行为会有所不同,具体取决于我是否重用相同的 HTTPBuilder 对象来对同一个 REST 服务执行两个不同的请求: def http = new HTTPB
我需要下载并保存文件。我正在尝试使用 HTTPBuilder,因为它具有简单的 API 并且支持 cookie。我写了以下代码: //create new httpBuilder and set co
我有一个 NiFi StandardSSLContextService,它给了我一个自定义的 SSLContext。现在我想知道如何在 Groovy(通过 ExecuteScriptProcessor
我是一名优秀的程序员,十分优秀!