我想部署一个Django Web应用程序,因此我需要选择一个Web服务器来提供Python文件.
我应该提一下,我的生产站点将位于一台服务器上,该服务器将托管数据库和Web服务器.作为动力选择,我的目标是将数据库移动到专用服务器等.
这是我的问题:
提前谢谢了
从网上我发现WSGI是一个用于python web开发/框架的CGI.FCGI似乎是各种语言的更通用的网关.在参考python和C/++语言时,不知道两者之间的性能差异.
我需要编写一个C++接口,它可以读取我们的数据结构,并使用http协议提供基于查询的o/p.
服务器需求
它应该能够同时为100个客户端服务.
为什么选择C++
所有代码都是用C++编写的.所以我们需要在C++中编写一个http层.这就是我选择C++而不是更传统的网络编程语言的原因.
我想使用nginx来提供静态文件并使用它的代理传递来与C++通信.
我找到了两种方法:
编写FastCGI c ++模块.
编写node.js c ++模块.
如果你有任何其他建议,请另外提出
您能否根据以往的经验列出每种方法的优缺点?
参考PHP文件是否有静态代码分析器[如Lint]?- 我正在研究如何在开发人员提交之前评估PHP文件的内容. 任何适合的解决方案都将通过类似答案的SVN钩子触发:是否可以从PHP检查PHP文件语法?
我在检查SVN时遇到了PHP文件的自动语法检查,这是我想要的角度,但是...... php -l还不够.
例如,给定代码:
if ($foo == 'bar') {
echo $foo;
}
Run Code Online (Sandbox Code Playgroud)
这导致:
2012/01/15 02:51:14 [错误] 694#0:*164 stderr发送的FastCGI:"PHP注意:未定义的变量:foo
相比:
if (isset($foo)) { echo $foo; }
Run Code Online (Sandbox Code Playgroud)
其中一些归结为教育程序员最佳实践.不幸的是,有些人没有像其他人那样快速学习,并且确保符合编码标准的唯一方法是减少进入未经测试或不符合要求的SVN.
从这个问题的第一个链接,我尝试过:
$foo$fooRun Code Online (Sandbox Code Playgroud)if ($foo == 'bar') { \_ HERE==== /mnt/hgfs/workspace/scratch-pad/phpinfo.php:44:警告:比较(未知)==(串):无法检查未知类型之间的比较
$foo虽然PHP完整性检查表明它是正确的答案,但不会通知问题所有这些都以他们自己的方式很有趣,但是没有人能够捕获这些只在运行时才能找到的问题.
欣赏有关此主题的意见/想法.
编辑
有一张海报表明PHPLint是正确的方法.我想,好的!让我们再试一次,因为有一个新版本: phplint-pure-c-1.1_20120202:
<?php
if ($foo == 'bar') …Run Code Online (Sandbox Code Playgroud) 我正试图Plack::App::CGIBin在FreeBSD 8.2上使用Apache2和FastCGI.最终的目标是能够使用这个设置通过Plack服务一大堆遗留的CGI脚本,以便利用其中间件功能,但我甚至无法得到一个简单的例子.
我已经按照关于Plack :: Handler :: FCGI和Plack :: App :: CGIBin本身的CPAN文档,但我不确定我是否遗漏了某些内容或做错了哪些文档没有涵盖.
这是我添加的Apache配置:
# Set up external server
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket
# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/
Run Code Online (Sandbox Code Playgroud)
运行外部服务器的命令:
plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi
Run Code Online (Sandbox Code Playgroud)
服务器成功启动,返回以下内容:
FastCGI: manager (pid <pid>): initialized
FastCGI: manager (pid <pid>): server (pid <pid>) started
FastCGI: server (pid <pid>): initialized
Run Code Online (Sandbox Code Playgroud)
这是app.psgi:
#!/usr/bin/env plackup -s FCGI
use Plack::App::CGIBin;
use Plack::Builder;
my $app = Plack::App::CGIBin->new(
root => '/data/www/plack',
)->to_app; …Run Code Online (Sandbox Code Playgroud) PHP-FPM的主页http://php-fpm.org/表明它是PHP 5.3.3以来的PHP的一部分.现在,我想知道,当我从php.net下载最新的PHP二进制文件时,它没有php-fpm.我怎么得到它?它甚至适用于Windows吗?
我的配置文件有一个server以...开头的指令块
server {
server_name www.example1.com www.example2.com www.example3.com;
Run Code Online (Sandbox Code Playgroud)
...为了允许使用不同的域名访问该站点.
但是,在这种情况下,PHP $_SERVER['SERVER_NAME']始终返回第一个条目server_namehttp://www.example1.com
所以我无法从PHP代码中知道用户用来访问该站点的域.
有没有办法告诉nginx/fastcgi传递用于访问该网站的真实域名?
到目前为止,我发现的唯一解决方案是server使用不同的server_name条目为每个域重复整个块,但显然我正在寻找更好的块.
有没有人知道任何链接到IIS与Apache主机的实际性能比较?
我希望利用现有的基础设施来改变从.NET到PHP应用程序的技术,但我找不到有关在不同平台上托管的PHP的任何信息.关于IIS与Apache,或者ASP.NET与PHP,或者任何其他语言服务器与服务器,语言与语言,但没有服务器/语言与服务器/语言的关系.
我目前的方向是使用PHP与FastCGI ..看起来不错.只需要证明它是合理的,或找到一个令人信服的理由拒绝我曾经习惯的那个可爱的巨型怪兽.
更新
Windows环境将是运行IIS6的Win2k3,其中FastCGI为PHP扩展提供服务.还计划使用eAccelerator或类似的脚本缓存.
出于一些奇怪的原因,就在今天我们的服务器决定在会话开始时非常慢.对于每个session_start,服务器要么在30秒后超时,要么它将花费大约20秒来启动会话.这是非常奇怪的,因为它已经很长时间没有这样做了(我们的服务器最后一次这样做是在大约7个月前).我试图将会话更改为通过数据库运行,而且工作正常,但是,因为我们当前的网站已经构建,所以每个页面都需要几天时间并且更改会话加载以包含新会话处理程序.因此我的问题仍然是:
为什么这么慢,为什么有时呢?
我们在一台专用的hetzner服务器上运行24GB的ram,CPU速度足以运行一个简单的网络服务器(我相信Xeon,但我不确定).我们使用apache + fastcgi + php5设置在服务器上运行debian.
服务器不会通过服务器状态和top命令报告太多负载.Vnstat使用我们的网络链接报告没有任何问题(同样,这不会导致本地会话处理缓慢).IOtop报告处理整个硬盘的过程没有问题.如果通过vim完成,写入会话文件所在的tmp文件夹的速度很快.
再说一次,为了清楚起见,我的主要关注点不是我们是否应该切换到数据库或内存缓存版本的会话,而是简单地问为什么会发生这种情况,因为我看了一下似乎工作正常,除了PHP本身.
编辑:我们的PHP tmp目录中的最大文件是2.9 MB,所以没有什么可以产生影响,我相信.
更新:我从来没有弄清楚出了什么问题和/或如何解决它,但是在我们切换到memcached/db会话后问题就消失了.
我正在使用fcgi(通过使用manage.py runfcgi命令)在nginx后面运行一个django实例.由于代码被加载到内存中,因此无法在不杀死并重新启动django fcgi进程的情况下重新加载新代码,从而中断了实时网站.重启本身非常快.但是通过首先杀死fcgi进程,一些用户的操作将被中断,这是不好的.我想知道如何在不造成任何中断的情况下重新加载新代码.建议将受到高度赞赏!