4

我正在创建一个简单的聊天应用程序。已经在 Ubuntu 11.10 上安装了 nginx,通过 fast-cgi 使用 PHP。为了感受性能,我制作了一个简单的 PHP 文件,它会休眠 10 秒,然后报告时间。用几个浏览器实例(不同的浏览器,不同的机器)调用它,在大约 10 个实例后响应变得迟缓,比预期的要少得多(希望在数百个实例之前不会看到任何恶化,尽管使用手动浏览器测试这不切实际) .

我是网络开发人员,而不是系统管理员,也许超出了我的理解范围?没有寻找最佳解决方案(搜索显示 nginx 应该能够处理每个核心 10k),但几百个就很好了。

还有 Nginx 推送流模块,但我不知道如何安装它,这似乎是另一种需要掌握的技术。开箱即用的基本 nginx 是否应该能够满足我的期望,即使用 PHP 的 100 多个长期连接?

4

3 回答 3

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服务器,您可以使用

https://github.com/slact/nginx_http_push_module

于 2012-04-19T22:36:48.813 回答
1

推送流模块在技术上会做你想做的事——设置一个 url,你可以在其中推送更新,而客户端代码中的 pubsub 可以轮询该更新。

为了安装推流模块,您需要获取 nginx 的最新源,获取该模块的源,编译它,然后使用新模块源的路径作为标志之一重新编译您的 nginx 。看看我是怎么做到的,在这里:

使用 apt-get install nginx 后重新编译 nginx

如果您的 nginx 服务器的重新启动没有在当前实例的列出标志中列出该模块,那么您在重新编译期间没有正确覆盖 nginx 文件。确保包含--sbin-path标志以确保覆盖到正确的目录。

一旦您确认它实际上已在 nginx 中安装并运行,然后按照@baba 提供的步骤操作

于 2012-04-19T22:37:43.177 回答
0

你能介绍一下到目前为止你是如何配置 Nginx 的吗?你对你的配置有什么看法?在我自己看来,对你来说最关键的配置应该是工作进程、工作连接、open_file_cache 和 keep alives。这是一篇很好的文章,涵盖了所有这些:

http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/

您也可能想进一步了解指令:

http://wiki.nginx.org/HttpCoreModule

我之前用 2 和 10240 配置了工作进程和工作连接,keepalives > 20。希望对你有帮助。

** 哦,我也忘了提——也许 Opcode 缓存可以为你工作?尝试安装 PHP-APC。

于 2012-04-19T22:43:05.113 回答