Php 如何使用Ratchet响应HTML5服务器端事件?

Php 如何使用Ratchet响应HTML5服务器端事件?,php,websocket,ratchet,Php,Websocket,Ratchet,(注意:我特意在这里添加了不充分的websocket标记,因为这是websocket专家了解Ratchet体系结构的最好机会) 我准备实现HTML5服务器端事件,我需要的是服务器端解决方案。由于不考虑挂起Apache的每个连接一个进程(连接池限制、内存消耗…),我希望Ratchet project能有所帮助,因为它是维护最频繁的项目,而且它们有http服务器和其他组件 我的问题是:我如何使用它?不是用于升级http请求(默认用法),而是用于提供动态生成的内容 到目前为止我试过什么? 已安装棘轮,

(注意:我特意在这里添加了不充分的
websocket
标记,因为这是websocket专家了解Ratchet体系结构的最好机会)

我准备实现HTML5服务器端事件,我需要的是服务器端解决方案。由于不考虑挂起Apache的每个连接一个进程(连接池限制、内存消耗…),我希望Ratchet project能有所帮助,因为它是维护最频繁的项目,而且它们有
http
服务器和其他组件

我的问题是:我如何使用它?不是用于升级http请求(默认用法),而是用于提供动态生成的内容

到目前为止我试过什么?

  • 已安装棘轮,如本教程所述

  • 已测试WebSocket功能-工作正常

  • 遵循非常基本的一套说明:

  • /bin/http server.php

    use Ratchet\Http\HttpServer;
    use Ratchet\Server\IoServer;
        require dirname(__DIR__) . '/vendor/autoload.php';
        $http = new HttpServer(new MyWebPage);
    
    $server = IoServer::factory($http);
    $server->run();
    
    要想让服务器正常工作,需要声明这里的
    MyWebPage
    类,不应该是专家,但如何声明呢

    棘轮文档似乎没有涵盖这一点。


    检查上面的链接。这里的家伙正在使用Ratchet构建一个实时聊天服务器。他基本上是先存储
    用户名
    ,然后发送/广播给所有人。您可以修改它,并在发送时检查某些
    用户名
    uid
    此时处于活动状态,并且仅向它们发送数据。您可以动态生成数据并发送给特定用户或所有用户。这可能会有所帮助。

    您的
    MyWebPage
    类需要实现
    HttpServerInterface
    。因为这只是一个简单的请求/响应,所以您需要发送一个响应,然后关闭类的
    onOpen()
    方法中的连接:

    <?php
    
    use Guzzle\Http\Message\RequestInterface;
    use Guzzle\Http\Message\Response;
    use Ratchet\ConnectionInterface;
    use Ratchet\Http\HttpServerInterface;
    
    class MyWebPage implements HttpServerInterface
    {
        protected $response;
    
        public function onOpen(ConnectionInterface $conn, RequestInterface $request = null)
        {
            $this->response = new Response(200, [
                'Content-Type' => 'text/html; charset=utf-8',
            ]);
    
            $this->response->setBody('Hello World!');
    
            $this->close($conn);
        }
    
        public function onClose(ConnectionInterface $conn)
        {
        }
    
        public function onError(ConnectionInterface $conn, \Exception $e)
        {
        }
    
        public function onMessage(ConnectionInterface $from, $msg)
        {
        }
    
        protected function close(ConnectionInterface $conn)
        {
            $conn->send($this->response);
            $conn->close();
        }
    }
    
    当您运行
    php bin/http server.php
    并访问时,您应该会看到Hello World!浏览器中的响应


    这是基本请求/响应系统所需的全部内容,但可以通过实现HTML模板之类的东西进一步扩展它。我自己已经实现了一点,我已经上传到github,还有很多其他东西,包括一个可以扩展到不同页面的抽象控制器。

    你有没有用过它?@Andy,不幸的是没有。我昨天整天都在用它,现在有了一个基本的HTTP服务器。在接下来的几天里,当我把一切整理好后,我会发布一个答案。这似乎正是我想要的——谢谢你的努力。在测试您的代码后,我会立即接受您的答案-到目前为止,请投票。@Miloshio Github项目包含的功能也比这个答案多得多-它可以提供HTML模板,而不仅仅是一个基本的纯文本响应。还有一些其他的东西,比如一个用于获取和设置配置值的config对象,还有一个logger:)显示了如何使用请求对象。是的,这是一个功能齐全的http服务器。现在由我来实现
    内容类型:文本/事件流
    和脉冲更新。非常感谢你。我会把你的项目交给Github。
    <?php
    
    use Ratchet\App;
    
    require dirname(__DIR__) . '/vendor/autoload.php';
    
    $app = new App('localhost', 8080, '127.0.0.1');
    $app->route('/', new MyWebPage(), ['*']);
    
    $app->run();