我正在创建一个简单的聊天应用。已经在Ubuntu 11.10上安装了nginx,通过fast-cgi安装了PHP。为了感受性能,我做了一个简单的PHP文件,睡眠时间为10秒,然后报告时间。用几个浏览器实例(不同的浏览器,不同的机器)调用它,响应在大约10个实例后变得迟缓,比预期少得多(希望在数百个之前看不到任何恶化,尽管使用手动浏览器测试这是不切实际的)
我是一个web-dev,而不是sys-admin,可能不是我的深度?不寻找最佳解决方案(搜索显示nginx应该能够处理每个核心10k),但几百个会很棒。
还有Nginx推送流模块,但我无法弄清楚如何安装它,似乎还有另一种技术可以解决。基本开箱即用的nginx应该能够应付我的期望,即使用PHP进行100多个长期连接吗?
答案 0 :(得分:1)
您需要配置订阅和发布的终点。将以下内容添加到您的nginx.conf文件中:
# internal publish endpoint (keep it private / protected)
location /publish {
set $push_channel_id $arg_id; #/?id=239aff3 or somesuch
push_publisher;
push_store_messages on; # enable message queueing
push_message_timeout 2h; # messages expire after 2 hours, set to 0 to never expire
push_message_buffer_length 10; # store 10 messages
}
# public long-polling endpoint
location /subscribe {
push_subscriber;
# how multiple listener requests to the same channel id are handled
# - last: only the most recent listener request is kept, 409 for others.
# - first: only the oldest listener request is kept, 409 for others.
# - broadcast: any number of listener requests may be long-polling.
push_subscriber_concurrency broadcast;
set $push_channel_id $arg_id;
default_type text/plain;
}
参见文件
http://www.brentsowers.com/2011/06/http-long-polling-aka-comet-with-nginx.html
http://www.igvita.com/2009/10/21/nginx-comet-low-latency-server-push/
如果您想将其转换为完整的COMET
服务器,可以使用
答案 1 :(得分:1)
推送流模块在技术上会按照您的意愿执行操作 - 设置一个可以推送更新的网址,然后可以通过客户端代码中的pubsub进行轮询。
为了安装推送流模块,你需要获取最新的nginx源代码,获取该模块的源代码,编译它,然后使用新模块源代码的路径重新编译你的nginx 旗帜。看看我是怎么做到的,在这里:
Recompiling nginx after using apt-get install nginx
如果重新启动nginx服务器未在当前实例的列出标志中列出该模块,则在重新编译期间未正确覆盖nginx文件。确保包含--sbin-path
标志以确保覆盖正确的目录。
一旦确认它已经在nginx中安装并运行,请按照@baba提供的步骤进行操作
答案 2 :(得分:0)
到目前为止,你能说明你如何配置Nginx吗?以及您对配置的看法?在我看来,最重要的配置应该是工作进程,工作者连接,open_file_cache并在此处保持活力。这是一篇很好的文章,涵盖了所有这些:
http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/
您也可以查看更多指令:
http://wiki.nginx.org/HttpCoreModule
我之前使用2和10240配置了工作进程和工作者连接,使用keepalive> 20.希望对你有所帮助。
**哦,我也忘了提 - 也许Opcode缓存可以为你工作?尝试安装PHP-APC。