请问怎么Comet是如何实现用户的上线和下线的???还有,web的所谓的server push应该也不是真正的server push吧?也是基于轮询的吧?还有就是,假如,我一个用户A想向B发消息,应该不能像c/s那样直接哪b的socket来发不?应该也是写入一个公共文件,然后A用户轮询这个文件来看看自己有没有消息把??哪位大哥帮帮我啊,苦找了两天资料,也没有相关的代码,那位有例子可以发我一下啊?我不要只是一个while(true){输出信息},谢谢大哥们了,我油箱lrcasd@163.com
------解决方案--------------------------------------------------------
http://www.pushlets.com/ 可以下载AspNetComet Demo。。asp.net实现的service push
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
http://www.cnblogs.com/windstore/archive/2009/03/12/1409676
ServerPush其实就是用长连接实现的
------解决方案--------------------------------------------------------
建议你看下这个Demo:http://download.csdn.net/source/1428990
一看便知。。
------解决方案--------------------------------------------------------
客户端通过ajax和服务器端建立连接的时候会传一个票据作为身份标识。。然后服务器端会有一个异步的线程池,还维护了一个消息的队列,如果有新的消息,就push到根据票据标识的对应的客户端。 服务器端的request也是异步的,一直和客户端保持着长连接。。 你看下它那个js和代码就知道,我一年前研究过,现在都忘了。。 呵呵~
------解决方案--------------------------------------------------------
既然叫server push就该是实际意义上的server push,也就是服务器端保持一个向客户端发送消息的长连接而不断开。
至于用户上线离线,是通过心跳包的方式来实现。比如每隔一分钟客户端需要向服务器发送一个消息告知服务器客户端仍存活,如果服务器在一分钟后仍未收到心跳包,则说明客户端已断开,则可切断连接。
------解决方案--------------------------------------------------------
while循环确实是实现了长连接的。
如何判断是否长连接?只需要观察生成页面后TCP连接是否断开,可以在使用DOS命令netstat -an查看。
使用while循环这种方法有个毛病,浏览器的进度条会一直存在,不过这个问题可以用其它手段解决。
而LZ说的那个DEMO,没仔细研究,但感觉未必是长连接。使用netstat命令查看,发现维持连接WEB的端口在不断变化,大概2秒变化一次,说明连接是重新建立的。如果是发送心跳包不需要如此高的频率。因此不管这个DEMO是什么技术手段,就其表现结果来看,如此频繁的重新建立连接,和client pull轮询方式也没什么区别了。