- 论坛徽章:
- 0
|
这个问题实在是不知道去哪里问,考虑到这里人多,所以发在了这里。
有一个程序流程,大致是这样的:
client request1 --> server response1 -->client request2 -->server response2
很常见的流程。问题在于server response1以后,需要等待client request2,然后继续流程。
单线程,没有问题。多线程,有问题。问题是:可能server在等待client A request2的时候,client B request1过来了,甚至client B request2也过来了。(或者可以简单的理解为:就是基于udp的网络程序.)
一般解决这种问题的方式,我能想到的有两种:
1,让整个流程基于连接,长连接的思路。这个在这里不适合,很容易造成造成server block.
2,手动制造一个session.既第一次response1开始一个session id,然后后续的请求必须带上本次session id.
这样的缺点是server 向client公布接口的时候,必须要带有个毫无意义的session id,且不说结构上不好看,放在整个数据的位置也不好选择(比如常见的,在http head中放点东西)。于是request1将成为一个独特的request,无法以统一的结构做饲服器处理。当然可以选择request 1也带有session id,然后抛弃.但是无论如何,这个session id是不应该出现在request中的,因为它是技术需要而不是业务需要.
我曾经想到,这和操作系统的多终端相似,比如多个终端给敲了键盘,服务器总能把这个事件准确地发给相应的程序.
不知道谁能指点下,给个简单的思路.
就是怎么样些程序,或者提供api,以调用方透明的方式知道,某个后续的request来自某个确定的session.
[ 本帖最后由 虎皮尖椒 于 2008-9-3 19:27 编辑 ] |
|