Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无国籍人士;使用PHP(和Symfony)的异步web服务器_Php_Node.js_Symfony_Asynchronous_Stateless - Fatal编程技术网

无国籍人士;使用PHP(和Symfony)的异步web服务器

无国籍人士;使用PHP(和Symfony)的异步web服务器,php,node.js,symfony,asynchronous,stateless,Php,Node.js,Symfony,Asynchronous,Stateless,TL;DR:我不确定这个话题在StackOverflow上是否有一席之地,但基本上,它只是一个争论的话题,并且考虑如何像我们使用NodeJS那样制作PHP应用程序(无状态请求流、异步调用等) 形势 我们知道NodeJS可以同时用作web服务器和web应用程序 但是对于PHP(文档中这么说) 但是,由于Symfony full stack基于处理请求对象的内核,这意味着我们应该能够向同一内核发送大量请求,前提是我们可以在侦听HTTP请求之前通过创建内核“引导”php web服务器(而不是应用程序)

TL;DR:我不确定这个话题在StackOverflow上是否有一席之地,但基本上,它只是一个争论的话题,并且考虑如何像我们使用NodeJS那样制作PHP应用程序(无状态请求流、异步调用等)

形势 我们知道NodeJS可以同时用作web服务器和web应用程序

但是对于PHP(文档中这么说)

但是,由于Symfony full stack基于处理
请求
对象的
内核
,这意味着我们应该能够向同一内核发送大量请求,前提是我们可以在侦听HTTP请求之前通过创建内核“引导”php web服务器(而不是应用程序)。我们的路由器只会创建一个请求对象并让内核处理它

但对于这一点,Symfony应用程序必须是无状态的,例如,我们需要条令在请求后有效地清除其工作单元,或者我们可能需要根据请求对某些组件进行分类(通过使用其唯一的PHP类引用id标识请求?或使用其他PHP进程?),显然,在PHP中,或者在我们使用内部web服务器的方式中,我们需要更多异步的东西

我有时会问自己,现在也会问社区的主要问题 为了澄清这一点,我对PHP有一些问题:

  • 为什么不建议生产内部PHP Web服务器?
    我的意思是,如果我们可以配置服务器的运行方式及其“路由器”文件,我们应该能够像任何PHP服务器一样使用它,是还是不是
  • 它的内部行为如何?两个请求之间是否共享内存?
    通过使用路由器,我觉得很明显变量是不共享的,否则我们可以制作类似nodej的应用程序,但PHP似乎无法做到这一点
  • 是否真的可以使用Symfony创建完整的无状态应用程序?
    e、 g.我向同一个内核对象发送两个不同的请求,在这种情况下,这两个请求是否有可能在Symfony核心组件中产生冲突
  • 实际上,“创建一个内核->启动服务器->根据请求,让内核处理它”行为的想法非常棒,因为它与NodeJS非常相似,但实际上,PHP范例与此不兼容,因为我们需要异步处理每个请求。但是如果内核及其容器是无状态的,那么应该有一种方法来做类似的事情,不是吗
  • 一些想法 我听说过Websocket集成,但从未体验过,现在对我来说似乎有点太复杂了(我可能缺乏一些应用程序异步性的概念,这就是为什么我的大脑在得到更多答案之前无法理解:D)

    有没有任何方法可以将这些库用作内核请求处理的“包装器”

    我的意思是,让我们创建这个reactphp/icicle/无论什么环境设置,像在任何Symfony应用程序中一样创建内核,并将应用程序作为web服务器运行,当检索到请求时,我们将其异步发送到内核,只要内核没有发送响应,客户端就会等待它,即使响应也是异步发送的(来自嵌套回调等,如NodeJS)

    这将使任何现有的Symfony应用程序都与这种模式兼容,显然,只要该应用程序是无状态的。(如果应用程序配置根据请求更改,则应用程序本身存在范例问题…)

    使用PHP库而不是以另一种方式使用PHP内部web服务器,这是否可能成为现实

    为什么要问这些问题? 事实上,如果PHP能够像Javascript那样在内部实现真正的异步功能,这将是一场革命,但这也会对PHP的性能产生很大影响,因为我们的web服务器中存在持久数据,引导更少(需要自动加载、实例化内核、从缓存文件中获取大量内容、解析路由等)

    在我看来,只有
    $kernel->handleRaw($request)将消耗CPU,其余部分(容器、参数、服务等)将已经在内存中,或者对于服务,“等待实例化”。然后,我认为性能提升

    它可能会让那些仍然认为PHP是一种非常糟糕且使用速度慢的语言的人有点不知所措:D

    对于读者和响应者;) 如果一个核心PHP贡献者读到了我的文章,有没有什么方法可以让PHP内部更加异步,即使是基于函数或类的特定的新内部API

    我不是所有这些概念的专家,我希望真正优秀的专家能够阅读并回答我


    如果所有这些都能以任何方式实现的话,这将是PHP世界的一大进步。

    您的问题可以总结如下:

    “PHP会更像节点吗?”

    答案当然是肯定的。但这就引出了另一个问题:

    “PHP应该更像节点吗?”

    现在答案并不那么明显

    当然,从理论上讲,PHP可以变得更像Node——甚至在某种程度上使其完全相同。只需使用Node的下一个版本,并将其命名为PHP6.0或其他版本

    我认为这对Node和PHP都是有害的。运行时环境的多样性是有原因的。其中一个变体是在给定环境中使用的并发模型。使其中一个与另一个相似将意味着程序员的选择更少。选择越少,表达自由就越少

    PHP和Node是在不同的时间出于不同的原因创建的

    PHP开发于1995年,名称代表个人主页。用例是向HTML添加一些服务器端动态特性。那时我们已经有了SSI和CGI,但人们希望能够将数据库查询的结果同步地注入HTML,否则就没有多大意义了
    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080   backup;
        server backup2.example.com:8080   backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }