gpt4 book ai didi

grails - 使用HTTPBuilder池化连接

转载 作者:行者123 更新时间:2023-12-02 14:54:00 26 4
gpt4 key购买 nike

我有一个Grails / Groovy应用程序,该应用程序正在使用HTTPBuilder库来调用我们的应用程序服务器。随着资源利用率的提高,我们正在寻找一种缓冲HTTP连接的方法。我找到的唯一支持池化的HTTPBuilder版本是AsyncHTTPBuilder,但是我们的调用必须同步进行。有没有人有过使用HTTPBuilder进行池化连接的经验,或者是否应该使用替代库来使用池化连接进行请求?

这是我们使用HTTPBuilder库的示例:

def get(event, request) {    
def http = new HTTPBuilder(appServerURL)
def result = ""
http.client.cookieStore.addCookie
sessionHolderService.getVPMClientUser().apiSessionCookie
http.request(GET, TEXT) {
uri.path = "/path/on/appserver"
uri.query = [event: event, request: request, responseFormat: 'text/xml']

response.success = { resp, text ->
result = text.text
}

response.failure = { resp, text ->
result = text.text
throw new VPMClientException(resp.status, resp.message, text.text)
}
}
result
}

最佳答案

我们的应用程序也有类似的问题(但仅限于一个客户端实例)。以下解决方案基于Gpars。这些 Action 被放入发送队列中,然后由任务使用。

final def http = ...

final DataflowQueue sendQueue = new DataflowQueue()
final DataflowVariable finished = new DataflowVariable<Boolean>()

def sendQueueTask = task {
while(!finished.isBound()){
def sendAction = sendQueue.getVal(1, TimeUnit.SECONDS)
if(sendAction)
sendAction()
}
}

然后将 Action 包装在sendQueue中添加的闭包中:
def get(event, request) { 
sendQueue << {
// your get implementation
}
}

关于grails - 使用HTTPBuilder池化连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205843/

26 4 0