Web服务和来自同一客户端的多个请求

如果我有一个客户端应用程序一个一个地向我的Web服务发送请求,那么Web服务是否能够处理每个请求而不是因为新请求而覆盖先前的请求?我希望处理所有请求而不是替换另一个请求.我是否可以使用来自同一客户端的多个请求执行此操作

解决方法

答案取决于您的架构.

例如,如果服务器是多线程的,并且业务逻辑部分是无状态的,那么在服务器上请求将不会覆盖,因为每个线程将调用一个函数并返回结果.

在客户端,最好的办法是让每个请求从不同的线程发送,以便该线程阻塞直到它得到响应,然后处理就可以了.

如果您有不同的设计,请描述一下.

更新:根据新信息,您可能需要查看以下内容
http://weblogs.java.net/blog/2006/02/01/can-i-call-you-back-asynchronous-web-services

我很好奇你是如何或者是否正在进行异步webservice调用.一般来说,webservices似乎阻止了,但是如果你这么快就进行这些调用,那么我只能假设异步性.

因此,Web服务可以在服务器端存储答案,因此有一个有状态的类通过IP地址将结果存储在字典中.然后客户端轮询答案,因此,理想情况下,如果您发送请求,您应该能够取回一系列答案作为回复.如果您已发送所有请求并仍在等待更多响应,则轮询.您应该能够再次获得一系列答案,以减少浪费的带宽.

更好的方法是让您的客户端也成为服务器,以便您发送请求,并使用IP地址:端口进行回调,这样服务器就会对客户端做出单向响应.但是,这更复杂,但它减少了浪费带宽.

更新2:这是在没有检查的情况下完成的,因此可能存在错误

@WebMethod
public ResponseModel[] AnswerQuestion(QuestionModel[] question) {
// Get the IP address of the client
  AnswerController ac = new AnswerController(question,ipaddress);
  return mypackage.myclass.StaticAnswers.GetAnswers(ipaddress);
  // return an array
}

@WebMethod
public ResponseModel[] GetAnswers() {
   return mypackage.myclass.StaticAnswers.GetAnswers(ipaddress);
}

好的,这应该给出一个粗略的想法.

AnswerController中没有任何假设.它应该知道完成工作所需要的一切,因为它将是无状态的,它指的是没有可以改变的全局变量,只有const和静态变量.

StaticAnswers类是静态的,只是存储答案,查找为ipaddress,以提高速度.

它将以适当的数组返回答案.

当您发送完最后一个问题后,只需致电GetAnswers,直到您取回所有内容为止.您可能需要在客户端跟踪已发送的数量以及已收到的数量.

这不是理想的,并且是一个非常粗略的草图,但希望它会给你一些工作.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些