日期:2014-05-20  浏览次数:20738 次

通过Socket实现服务器推送文件问题
请教各位大神,
目前有一个需要服务器向局域网内的指定计算机推送文件的需求,文件类型主要包括HTML,图片,js,css等,所以考虑使用socket实现
小弟考虑能不能将ServerSocket建立在局域网内所有客户端电脑上,在服务器端建立Socket,当服务器收到指令时,向指定客户端的ServerSocket建立连接,并通过流完成文件推送
在网上大概查了查,貌似没有这样将ServerSocket建立在客户端的案例,不知道这样做不合理的地方在哪?个人感觉这样做不仅可以减少服务器压力,也无需考虑并发和线程数的问题,请问大神这样做可行吗?如果不可行,问题出在哪里呢?小弟才疏学浅,问题可能比较幼稚,还请不吝赐教
socket

------解决方案--------------------
可以,但是有问题。
同样有并发问题吧,难道你准备一个一个推?也不会减少服务器的压力。socket连接建立起来以后两端是对等的。
你这想法肯定是要在客户端开一个固定端口,如果客户端端口被占用,用什么策略重新分配?如何通知服务器客户端的新端口。
最现实的做法服务器做延时推送大数据,就是客户端连接到服务器以后,服务器排队,有空闲的时候再推送
------解决方案--------------------
可以尝试思路:

服务器向客户端发一个指令,告诉客户端有文件要更新。

客户端收到这个指令后,到服务器来下载。

这样就不会让客户端做服务器用,角色清晰。另外,服务器还可以控制哪个服务端何时过来下载!
------解决方案--------------------
LZ思路有些叛逆。
服务器所在端作为服务端,监听固定的端口;客户端连接服务端下载各种文件。

数据推送问题,有两种方案:
1. 客户端定期发送请求,看服务端有没有要传输的数据,如果有就立即下载。
2. 客户端与服务端建立长连接,当服务端有数据要发送的时候,通过长连接推送数据。
    不过,这种实现方案比较复杂,不建议初学者使用。