我认为Gmail聊天使用socket,因为它肯定不会发送定期请求。请问你们中有人可以给我一些示例代码或指导如何解决这个问题吗?
我急需帮助,非常感谢您的帮助。对您表示敬意和问候。
如果你想了解如何使用Prototype的'comet'守护进程和jetty webserver来实现'comet'技术,那么例子对你很有用。在jetty下载中的示例代码中有一个聊天应用程序的示例。
最近我自己安装了jetty,所以你可能会觉得我的安装命令记录很有用:
开始尝试运行'comet'服务
从http://maven.apache.org/下载Maven
使用http://maven.apache.org/download.html#Installation安装Maven 我执行了以下命令 提取到/home/sdwyer/apache-maven-2.0.9
> sdwyer@pluto:~/apache-maven-2.0.9$ export M2_HOME=/home/sdwyer/apache-maven-2.0.9
> sdwyer@pluto:~/apache-maven-2.0.9$ export M2=$M2_HOME/bin
> sdwyer@pluto:~/apache-maven-2.0.9$ export PATH=$M2:$PATH.
> sdwyer@pluto:~/apache-maven-2.0.9$ mvn --version
-bash: /home/sdwyer/apache-maven-2.0.9/bin/mvn: Permission denied
> sdwyer@pluto:~/apache-maven-2.0.9$ cd bin
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ ls
m2 m2.bat m2.conf mvn mvn.bat mvnDebug mvnDebug.bat
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ chmod +x mvn
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ mvn –version
Maven version: 2.0.9
Java version: 1.5.0_08
OS name: “linux” version: “2.6.18-4-686″ arch: “i386″ Family: “unix”
sdwyer@pluto:~/apache-maven-2.0.9/bin$
从http://www.mortbay.org/jetty/下载Jetty服务器
解压到/home/sdwyer/jetty-6.1.3
> sdwyer@pluto:~$ cd jetty-6.1.3//examples/cometd-demo
> mvn jetty:run
一整套下载正在运行
完成后,打开浏览器并将其指向:http://localhost:8080
并测试演示。
示例演示的代码可以在目录中找到:
jetty-6.1.3/examples/cometd-demo/src/main/webapp/examples
对错不论,一个托管公司可能会因为以下几个原因而变得烦躁:
1)很有可能他们正在使用Apache Prefork。每个聊天请求可能都会创建一个新的连接,从而占用一个Apache进程。每个Apache进程占用的内存从1MB到100MB不等。
2)如果他们维护数据库服务器,而你作为客户在数据库编程方面不擅长,那么你可能会给他们的数据库带来压力。所谓“不擅长”可以指任何事情,从“没有正确建立索引”到“执行了大量细小的查询而不是合理的大查询”。
如上所建议,确保你的代码使用持久连接。此外:
1)在客户端实现一个退避算法。在活动期间每秒轮询服务器,然后逐渐增加轮询间隔,比如5秒、10秒、20秒等等。这样当没有活动时就不会给服务器造成过大负担。
2)多个标签页会让你崩溃。用户打开10个标签页,而它们都有你的聊天小部件每秒轮询服务器?这可不妙。即使你的主机不生气,性能也会下降。
如果这个东西变得很大,设计你的系统使得你可以独立运行聊天服务器部分而不影响其他网站应用。换句话说,客户端将会向“chat.yourwebapp.com”发出请求,而这个域名将会在像lighttpd这样的服务器上运行。为什么主机会阻止这个?如果您正在请求一个标准的http页面,如果您的主机不允许这样做,那么就是时候换主机了。
至于使用套接字,JavaScript没有原生连接到套接字的能力,尽管我相信JSocket是一个库,它允许您通过嵌入式Flash桥接套接字,实际上连接到您的服务器。我还没有找到一个可以做到这一点的jQuery插件,可能有一个。
您的服务器端代码也会发生很大变化(持久性与轮询非常不同),所以您需要努力工作。
我建议您继续做您正在做的事情,并升级您的主机,如果它无法处理它。除非您将同时拥有大量用户?如果繁忙时缓存系统可以避免每个请求都命中数据库,可能可以加速。