walkor / workerman

An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols.
http://www.workerman.net
MIT License
11.1k stars 2.26k forks source link

PSR7 for HTTP Protocol #51

Open praswicaksono opened 8 years ago

praswicaksono commented 8 years ago

Is there any plan to implement PSR 7 for HTTP Protocol?

walkor commented 8 years ago

Sorry. There is no plan at present. : - (

praswicaksono commented 8 years ago

Well I can help if you man but it require intensive communication. Where I can reach you for more talk about this? any IM maybe

praswicaksono commented 8 years ago

either gitter or IRC is fine with me since those tools already used by most opensource project also it can attract foreign developer to contribute.

walkor commented 8 years ago

https://gitter.im is ok. I've joined Atriedes and joostshao in the chat.

Arul- commented 5 years ago

Take a look at my implementation at https://github.com/Arul-/reactive-restler/blob/dev/interop/Workerman/Psr7.php

The only dependency it has with the rest of my framework is

$class = ClassName::get(ServerRequestInterface::class);

It can easily be changed by hardcoding the PSR Request class

I can make a pull request here if you like

walkor commented 5 years ago

Thank you for your post @Arul- . But I want to make workerman as simple as possible. I think it's a better choice to build a new PSR7 project and use composer to install it.

Arul- commented 5 years ago

Understood!

gotzmann commented 4 years ago

If anyone interested, I've used Workerman as the platform for building perfromant PSR7 framework here:

https://github.com/gotzmann/comet

There transparent transformation between Workerman internal Request and Response classes and PSR-7 compliant ones.

dominikzogg commented 4 years ago

A request handler adapter for workerman, using PSR-7, PSR-15 and PSR-17. Which can be used with every framework which is PSR-7 based.

https://github.com/chubbyphp/chubbyphp-workerman-request-handler

walkor commented 4 years ago

Here is example for workerman with PSR 7.

install

composer require workerman/psr7 ~1.4.4

example

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Protocols\Http;
use Workerman\Psr7\Response;
use Workerman\Psr7\ServerRequest;

$worker = new Worker('http://0.0.0.0:12345');
Http::requestClass(Workerman\Psr7\ServerRequest::class);
$worker->onMessage = function($connection, ServerRequest $request)
{
    $response = new Response(200, [], 'hello world');
    $connection->send($response);
};

Worker::runAll();
tourze commented 2 years ago

Here is example for workerman with PSR 7.

install

composer require workerman/psr7 ~1.4.4

example

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Protocols\Http;
use Workerman\Psr7\Response;
use Workerman\Psr7\ServerRequest;

$worker = new Worker('http://0.0.0.0:12345');
Http::requestClass(Workerman\Psr7\ServerRequest::class);
$worker->onMessage = function($connection, ServerRequest $request)
{
    $response = new Response(200, [], 'hello world');
    $connection->send($response);
};

Worker::runAll();

In workerman 4.x, $connection->send($response); is not work perfectly. It is better to use $connection->send(\Workerman\Psr7\response_to_string($response), true);

jhdxr commented 1 year ago

As workerman is now introducing/enhancing the HTTP class with its friends. Is there any plan to make those class PSR-7 compatible?