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请求(默认用法),而是用于提供动态生成的内容
到目前为止我试过什么?
/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();