应用模型,在该模型中,请求被发送到服务器端并保持一个很长的存活期,直到超时或是有服务器端事件发生。在该请求完成后,另一个长生存期的 Ajax
请求就被送去等待另一个服务器端事件。使用 Comet 的话,Web 服务器就可以在无需显式请求的情况下向客户端发送数据。
Comet 的一大优点是,每个客户端始终都有一个向服务器端打开的通信链路。服务器端可以通过在事件到来时立即提交(完成)响应来把事件推给客户端,或者它甚至可以累积再连续发送。因为请求长时间保持打开的状态,故服务器端需要特别的功能来处理所有的这些长生存期请求。
具体你可以在IBM developerworks上搜索
之前参与项目里,见到过有人用ajax长轮询来做实时数据推送。但是这样做有一个弊端就是会建立很多TCP连接,这样会给系统带来比较大的IO负担。
有没有一种方式,我们只进行一次TCP连接,在这一次TCP连接中,服务器不断给客户端吐数据。下面我们就来介绍一下comet推送方式:
这个和C#无关,而是和SOCKET你如何用有比较大的关系,和具体场景无关。现在有服务器A,客户端B、C
长连接:顾名思义,就是连接一旦连上就保持连接状态不关闭,举个例子,B现在要跟C聊天,然后通过服务器A中转后和C连接上了,B完成和C聊天后,这个用于发送消息的SOCKET不关闭而仍然维持连接状态就是长连接(只是举个例子,比如软件考虑到B和C可能过一阵还会聊天)了。
短连接:顾名思义,就是维持时间比较短的连接,在实际中就是该SOCKET当前任务一旦结束就关闭连接。用到上面的例子就是B和C聊完后,SOCKET就关闭了,下次需要聊天的时候重新连接。
关于长连接和短连接以前讨论的人很多,一般认为长连接效率高,因为不需要反复去连接,但是容易堵塞,那就麻烦了,到底丢了多少包都不清楚。而短连接恰好相反。
一般在用的时候,尽可能的SOCKET专用,即发送消息的SOCKET专门发送消息,传文件的SOCKET专门传文件。如果要用长连接,最好在自己的协议上考虑到心跳包,即过一阵发一个心跳包看对方是否有响应来确定是否SOCKET阻塞了,是否掉线了等等。
这个就不需要代码了吧,几句话就通了
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)