首先说明下大致过程:
服务端启动socket等待客户端(浏览器端)请求。
一个client请求的过程:
当有client1接入server时,server被激活,同时发送数据到客户端。
假设一个应用实例.实时股票动态
服务端有个线程,不断地扫描数据库。假如数据有更新,则写入到一个队列中。
每个客户端请求在服务端都用一个线程来循环处理请求,当有客户端连接时,则到队列中去取出元素,如果队列为空则不做处理,否则将当前元素推到客户端
我想问的是当有多个客户端都连接了服务端时,假如有两个客户端线程c1和c2,如果c1先取到队列中元素,c1方的浏览器页面更新了,c2再取的时候队列为空了。岂不是c2方的页面不会更新了?
其实最终的问题是服务端是怎么样将数据发送给多个连接了的客户端?
服务端启动socket等待客户端(浏览器端)请求。
一个client请求的过程:
当有client1接入server时,server被激活,同时发送数据到客户端。
假设一个应用实例.实时股票动态
服务端有个线程,不断地扫描数据库。假如数据有更新,则写入到一个队列中。
每个客户端请求在服务端都用一个线程来循环处理请求,当有客户端连接时,则到队列中去取出元素,如果队列为空则不做处理,否则将当前元素推到客户端
我想问的是当有多个客户端都连接了服务端时,假如有两个客户端线程c1和c2,如果c1先取到队列中元素,c1方的浏览器页面更新了,c2再取的时候队列为空了。岂不是c2方的页面不会更新了?
其实最终的问题是服务端是怎么样将数据发送给多个连接了的客户端?
我的理解是服务端有段代码
Socket sc=sk.accept();
每当有请求时都会产生一个sc实例吧,然后不断向这个实例的Outprintstream写数据啊
这样好像不太好吧
服务端都用一个线程来看Client是否请求更新
Yes:就查看数据是否比Client新Y:更新,N:进入个等待更新的队列,一旦有更新,就更新Client
No: 线程阻塞的等待Client发送更新请求
不断的写数据可不行 最起码要实现通信应答的处理
每个Client对应Server一个线程 他们都从Socket得到不光是Outprintstream,还有InputStream
这样Client的Outprintstream放送更新请求,Server的InputStream接受命令
Server的Outprintstream放送数据Client的InputStream接受数据
这是个很简单的通信,其他的命令通信可以类似的实现
至于为什么一个线程对应一个客户端,这很明显啊。http连接也是这样的吧