A server side alternative implementation of socket.io in PHP based on workerman.

Overview

phpsocket.io

A server side alternative implementation of socket.io in PHP based on Workerman.

Notice

Only support socket.io v1.3.0 or greater.
This project is just translate socket.io by workerman.
More api just see http://socket.io/docs/server-api/

Install

composer require workerman/phpsocket.io

Examples

Simple chat

start.php

use Workerman\Worker;
use PHPSocketIO\SocketIO;
require_once __DIR__ . '/vendor/autoload.php';

// Listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function ($socket) use ($io) {
    $socket->on('chat message', function ($msg) use ($io) {
        $io->emit('chat message', $msg);
    });
});

Worker::runAll();

Another chat demo

https://github.com/walkor/phpsocket.io/blob/master/examples/chat/start_io.php

use Workerman\Worker;
use PHPSocketIO\SocketIO;
require_once __DIR__ . '/vendor/autoload.php';

// Listen port 2020 for socket.io client
$io = new SocketIO(2020);
$io->on('connection', function ($socket) {
    $socket->addedUser = false;

    // When the client emits 'new message', this listens and executes
    $socket->on('new message', function ($data) use ($socket) {
        // We tell the client to execute 'new message'
        $socket->broadcast->emit('new message', array(
            'username' => $socket->username,
            'message' => $data
        ));
    });

    // When the client emits 'add user', this listens and executes
    $socket->on('add user', function ($username) use ($socket) {
        global $usernames, $numUsers;

        // We store the username in the socket session for this client
        $socket->username = $username;
        // Add the client's username to the global list
        $usernames[$username] = $username;
        ++$numUsers;

        $socket->addedUser = true;
        $socket->emit('login', array( 
            'numUsers' => $numUsers
        ));

        // echo globally (all clients) that a person has connected
        $socket->broadcast->emit('user joined', array(
            'username' => $socket->username,
            'numUsers' => $numUsers
        ));
    });

    // When the client emits 'typing', we broadcast it to others
    $socket->on('typing', function () use ($socket) {
        $socket->broadcast->emit('typing', array(
            'username' => $socket->username
        ));
    });

    // When the client emits 'stop typing', we broadcast it to others
    $socket->on('stop typing', function () use ($socket) {
        $socket->broadcast->emit('stop typing', array(
            'username' => $socket->username
        ));
    });

    // When the user disconnects, perform this
    $socket->on('disconnect', function () use ($socket) {
        global $usernames, $numUsers;

        // Remove the username from global usernames list
        if ($socket->addedUser) {
            unset($usernames[$socket->username]);
            --$numUsers;

            // echo globally that this client has left
            $socket->broadcast->emit('user left', array(
               'username' => $socket->username,
               'numUsers' => $numUsers
            ));
        }
   });
});

Worker::runAll();

Enable SSL for https

(phpsocket.io>=1.1.1 && workerman>=3.3.7 required)

start.php

<?php

use Workerman\Worker;
use PHPSocketIO\SocketIO;

require_once __DIR__ . '/vendor/autoload.php';

// SSL context
$context = array(
    'ssl' => array(
        'local_cert'  => '/your/path/of/server.pem',
        'local_pk'    => '/your/path/of/server.key',
        'verify_peer' => false
    )
);
$io = new SocketIO(2021, $context);

$io->on('connection', function ($connection) use ($io) {
    echo "New connection coming\n";
});

Worker::runAll();

手册

中文手册

Livedemo

chat demo

Run chat example

cd examples/chat

Start

php start.php start for debug mode

php start.php start -d for daemon mode

Stop

php start.php stop

Status

php start.php status

License

MIT

Comments
  • Sending events from php

    Sending events from php

    Hi there, I'm using a slightly modified version of this project's chat demo.

    Now, i have a question: Can I send messages to the chat from a php script or separate php app?

    For example: I wanted to send a chat to everybody when something get's stored on the database. (e.g.: "user X has added/modified product Y" type messages)

    Thanks

    question 
    opened by ptdev 25
  • Hi, walkor. Need PHPSocketIO secure(https)

    Hi, walkor. Need PHPSocketIO secure(https)

    I am developing webrtc signaling server with phpsocketio for video chat application. So i need php socket io server as secure(https).. how to make php socket io server ssl .. This library is awesome. i can't leave this because of this silly reason. please help me out. Thanks. mail Id : [email protected] can you please help me out ?

    opened by saikat-squareloop 23
  • Using rabbitmq or redis for pub/sub

    Using rabbitmq or redis for pub/sub

    How can you implement this using rabbitmq as pub/sub so you can user multiple servers? Or does this library support socket-io-redis? https://github.com/socketio/socket.io-redis

    I'd prefer using rabbitmq with this https://github.com/sensibill/socket.io-amqp but using amqp for PHP https://github.com/php-amqplib/php-amqplib

    Any idea on how to convert those socket.io.amqp to PHP and utilize them with this library to use Rabbitmq as explained here https://github.com/rajaraodv/rabbitpubsub.

    TIA

    question 
    opened by tolew1 17
  • xhr poll error

    xhr poll error

    I wrote a very simple application to test communication between nodeJS and PHP. Here's my code PHP (server side) :

    `include DIR . '/../vendor/autoload.php'; use Workerman\Worker; use Workerman\WebServer; use Workerman\Autoloader; use PHPSocketIO\SocketIO as Socket;

    $io = new Socket(8000);

    $io->on('connection', function($socket) { echo ('new connection'); $socket->addedUser=false; $socket->on('EVT1', function ($data) use ($socket){ vardump($data); $socket->emit('ACK1', array('message'=>'EVT1 flushed')); }); $socket->on('EVT2',function ($data) use ($socket){ $socket->emit('ACK2', array('message'=>'EVT2 flushed')); }); });

    $web = new WebServer('http://0.0.0.0:8002'); $web->addRoot('localhost', DIR . '/public'); Worker::runAll();`

    Here's the code on the client side (nodeJS) :

    var io = require('socket.io-client'); socket = io.connect('localhost', { port: 8000, reconnection : true }); socket.on('connect', function () { console.log("socket connected"); }); socket.on('connect_error', function(err) {console.log('connection error :'+err.message)}); socket.emit('EVT1', { user: 'me', msg: 'whazzzup?' }); socket.on('ACK1',function(data){console.log('received info : '+data);});

    I obtain the following result : connection error : xhr poll error

    Any idea ??

    bug 
    opened by manirac 15
  • SSL Wrong Version Number Error

    SSL Wrong Version Number Error

    Hello I have set SSL certificate and key file. But I got `

    "error:1408F10B:SSL routines : SSL3_GET_RECORD:wrong version number in ../TcpConnection.php on line 539"` Please help me

    opened by willowTank 14
  • socket not responding after sometime

    socket not responding after sometime

    I am running auction script through this but after running 12 hour got no response i have to use server.php start command again and again what is solution for this

    <?php
    use Workerman\Worker;
    use Workerman\WebServer;
    use Workerman\Autoloader;
    use PHPSocketIO\SocketIO;
    
    // composer autoload
    include __DIR__ . '/vendor/autoload.php';
    include __DIR__ . '/src/autoload.php';
    
    
    require_once 'app/Mage.php';
    //umask(0);
    Mage::app();
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    
    
    
    
    $io = new SocketIO(2020);
    
    
    $io->on('connection', function($socket){
         $socket->addedUser = false;
         // when the client emits 'new bid', this listens and executes
          $socket->on('bid', function ($postdata)use($socket){
          Mage::getSingleton('core/session', array('name' => 'frontend'));
          $latency= ping(Mage::getBaseUrl(), 80, 10);
      }
    
    }
    
    
    $web = new WebServer('http://0.0.0.0:2022');
    $web->addRoot('localhost', __DIR__ . '/public');
    
    Worker::runAll();
    

    here is my server.php status

    Workerman[server.php] status ---------------------------------------GLOBAL STATUS-------------------------------------------- Workerman version:3.3.3 PHP version:5.6.23-1+deprecated+dontuse+deb.sury.org~trusty+1 start time:2017-01-10 16:06:07 run 1 days 19 hours
    load average: 0.28, 0.35, 0.31 event-loop:select 2 workers 2 processes worker_name exit_status exit_count PHPSocketIO 0 0 WebServer 0 0 ---------------------------------------PROCESS STATUS------------------------------------------- pid memory listening worker_name connections total_request send_fail throw_exception 23921 14.5M socketIO://0.0.0.0:2020 PHPSocketIO 0 38046 0 0
    23922 7M http://0.0.0.0:2022 WebServer 0 0 0 0

    can you give any solution on that?

    question 
    opened by kingsatti 14
  • Origins , where is your api docs?

    Origins , where is your api docs?

    Hi, @walkor hope you are fine..

    Can you post the link where you phpsocket.io api is located, I am trying to restrict ORIGIN to my domain, can you tell me how is this accomplished?

    regards

    enhancement 
    opened by utan 13
  • Sending events from Php Script to a specific user connection

    Sending events from Php Script to a specific user connection

    I checked this issue #23 (Sending events from php) , and it lets us broadcast message to all users using Emitter class from phpsocket.io-emitter

    But i don't want to broadcast message to all users, but to a specific user. How to achieve this? Can you please help!

    question 
    opened by gunjot-mansa 11
  • Workerman process terminated exit with status 65280 After 2-3 hours

    Workerman process terminated exit with status 65280 After 2-3 hours

    Hello there,

    Till now i managed to keep my sockets working fine, and it is working fine in one of my project. but when i implemented same code in another project it work's fine but after some time the worker man process stops automatically.

    when i checked workerman logs. it is giving me following log which says exit with status code 65280

    2020-07-29 01:28:46 pid:30593 Worker[30593] process terminated
    2020-07-29 01:28:46 pid:17956 worker[PHPSocketIO:30593] exit with status 65280
    2020-07-29 03:57:53 pid:12635 Worker[12635] process terminated
    2020-07-29 03:57:53 pid:17956 worker[PHPSocketIO:12635] exit with status 65280
    2020-07-29 04:31:16 pid:12731 Worker[12731] process terminated
    2020-07-29 04:31:16 pid:17956 worker[PHPSocketIO:12731] exit with status 65280
    2020-07-29 04:38:40 pid:19620 Worker[19620] process terminated
    2020-07-29 04:38:40 pid:17956 worker[PHPSocketIO:19620] exit with status 65280
    2020-07-29 04:38:56 pid:20874 Worker[20874] process terminated
    2020-07-29 04:38:56 pid:17956 worker[PHPSocketIO:20874] exit with status 65280
    2020-07-29 04:43:13 pid:20875 Worker[20875] process terminated
    2020-07-29 04:43:13 pid:17956 worker[PHPSocketIO:20875] exit with status 65280
    2020-07-29 04:43:25 pid:21809 Worker[21809] process terminated
    2020-07-29 04:43:25 pid:17956 worker[PHPSocketIO:21809] exit with status 65280
    2020-07-29 04:43:36 pid:21811 Worker[21811] process terminated
    2020-07-29 04:43:36 pid:17956 worker[PHPSocketIO:21811] exit with status 65280
    2020-07-29 04:43:48 pid:21812 Worker[21812] process terminated
    2020-07-29 04:43:48 pid:17956 worker[PHPSocketIO:21812] exit with status 65280
    2020-07-29 04:43:51 pid:21838 Worker[21838] process terminated
    2020-07-29 04:43:51 pid:17956 worker[PHPSocketIO:21838] exit with status 65280
    2020-07-29 04:49:14 pid:21846 Worker[21846] process terminated
    2020-07-29 04:49:14 pid:17956 worker[PHPSocketIO:21846] exit with status 65280
    2020-07-29 04:50:00 pid:22882 Worker[22882] process terminated
    2020-07-29 04:50:00 pid:17956 worker[PHPSocketIO:22882] exit with status 65280
    2020-07-29 04:52:04 pid:22931 Worker[22931] process terminated
    2020-07-29 04:52:04 pid:17956 worker[PHPSocketIO:22931] exit with status 65280
    2020-07-29 05:00:52 pid:23606 Worker[23606] process terminated
    2020-07-29 05:00:52 pid:17956 worker[PHPSocketIO:23606] exit with status 65280
    

    i have contacted my sysadmin and he say's that he had already created this service as a system startup service it actually gets started automatically on server startup. The issue is it stops after 2-3 hours.

    @walkor Please look into this and help me to solve this.

    opened by prologictech 10
  • Hi, walkor, Have you planned to complete the namespace?

    Hi, walkor, Have you planned to complete the namespace?

    Now I want to get all the sockets in a room, and I have found it in sokect.io api, It's

    io.of('/').in('1234').clients((error, clients) => {
      if (error) throw error;
      console.log(clients); // => [PZDoMHjiu8PYfRiKAAAF, Anw2LatarvGVVXEIAAAD]
    });
    

    But It has the error like this

    Error: Call to undefined method PHPSocketIO\DefaultAdapter::clients() in /home/line/data/project/php/study/kf_io/vendor/workerman/phpsocket.io/src/Nsp.php:146
    

    So Can anyone tell me what to do now? Thank you very much

    opened by kaysen139 10
  • The examle doesnt works for me

    The examle doesnt works for me

    Sorry, but the example doesnt works for me. The default path to the autoloader file is wrong. If i change it i get this error: Call to undefined function Workerman\Lib\pcntl_signal() in .........\Lib\Timer.php on line 56

    opened by csimpi 10
  • Unable to setup phpsocket.io with Docker

    Unable to setup phpsocket.io with Docker

    Dockerfile.socket

    FROM php:8.1.13-cli
    
    RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
    CMD php /app/src/socket.php start -d
    

    docker-compose.yaml

    socket:
            build:
                context: .
                dockerfile: Dockerfile.socket
    
            depends_on:
                - database
    
            ports:
                - 8181:8181
    
            networks:
                - some-network
    
    opened by binemmanuel 0
  • Workerman\Lib\Timer not found

    Workerman\Lib\Timer not found

    Error: Class "Workerman\Lib\Timer" not found in /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/phpsocket.io/src/Engine/Socket.php:238 Stack trace: #0 [internal function]: PHPSocketIO\Engine\Socket->onClose() #1 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/phpsocket.io/src/Event/Emitter.php(93): call_user_func_array(Array, Array) #2 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/phpsocket.io/src/Engine/Transport.php(68): PHPSocketIO\Event\Emitter->emit('close') #3 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Connection/TcpConnection.php(944): PHPSocketIO\Engine\Transport->onClose(Object(Workerman\Connection\TcpConnection)) #4 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Connection/TcpConnection.php(592): Workerman\Connection\TcpConnection->destroy() #5 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Events/Select.php(352): Workerman\Connection\TcpConnection->baseRead(Resource id #70) #6 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Worker.php(2399): Workerman\Events\Select->run() #7 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Worker.php(1524): Workerman\Worker->run() #8 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Worker.php(1371): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker)) #9 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Worker.php(1345): Workerman\Worker::forkWorkersForLinux() #10 /Users/binemmanuel/Projects/zerabtech_app/backend/vendor/workerman/workerman/src/Worker.php(557): Workerman\Worker::forkWorkers() #11 /Users/binemmanuel/Projects/zerabtech_app/backend/src/socket.php(14): Workerman\Worker::runAll() #12 {main} worker[PHPSocketIO:55411] exit with status 64000

    phpsocket.io Version workerman/phpsocket.io": "^1.1.14

    opened by binemmanuel 2
  • use \Workerman\Lib\Timer is erroneous

    use \Workerman\Lib\Timer is erroneous

    The use-statement for the Timer-class is erroneous.

    https://github.com/walkor/phpsocket.io/blob/04e8b8a90cdd708a78e4c1b22f623292e0658628/src/Engine/Socket.php#L4 https://github.com/walkor/workerman/tree/master/src

    Is should solely be use \Workerman\Timer;

    "workerman/phpsocket.io": "dev-master", "workerman/phpsocket.io-emitter": "dev-master",

    opened by teampomello 0
  • $socket is null

    $socket is null

    image $socket is null
    public function index()
      {
          ini_set('display_errors', 'on');
          error_reporting(E_ERROR | E_WARNING | E_PARSE);
          $port = Config::get('param.ws.inquire_post');
          $io = new SocketIO($port);
          $io->on('connection', function ($socket) use ($io) {
              // 初始化 websocket
              $socket->on('init', function ($msg) use ($io, $socket) {
                  $this->init_connect($msg, $io, $socket);
              });
    
              $socket->on('server_message', function ($msg) use ($io, $socket) {
                  $this->server_message($msg, $io, $socket);
              });
              $socket->on('logout', function ($msg) use ($io, $socket) {
                  if (!isset($this->users[$socket->username])) {
                      $this->users[$socket->username] = 0;
                  }
    
                  --$this->users[$socket->username];
                  if ($this->users[$socket->username] <= 0) {
                      echo $socket->username . ' logout' . PHP_EOL;
                      unset($this->users[$socket->username]);
                      --$this->usersNum;
                      $socket->leave($socket->username);
    
                      echo date('Y-m-d H:i:s') . " {$socket->token} logout" . PHP_EOL;
                  }
                  $socket->emit('logout', 'logout success');
              });
              $socket->on('error', function ($err) use ($io, $socket) {
                  // 错误日志
                  try{
                      $content = $err->getTraceAsString();
                      $content .= "\n ---------------------------------------------".date('Y-m-d h:i:s', time()).'------'; ;
                      $my_path = Env::get('root_path').'logs/socketio/erp_ws';
                      file_put_contents($my_path, $content, FILE_APPEND);
                  } catch (Exception $e){
                      var_dump($e->getTraceAsString());
                  }
              });
    
              // 监听客户端连接成功发送数据
              $socket->on('success', function ($msg) use ($io, $socket) {
    
                  echo date('Y-m-d H:i:s') . " join" . PHP_EOL;
              });
    
              // 关闭页面/离开聊天室
              $socket->on('disconnect', function () use ($socket) {
                  if (!isset($this->users[$socket->username])) {
                      $this->users[$socket->username] = 0;
                  }
                  --$this->users[$socket->username];
                  if ($this->users[$socket->username] <= 0) {
                      unset($this->users[$socket->username]);
                      --$this->usersNum;
                      $socket->leave($socket->username);
                      $res = [
                          'username' => $socket->username,
                          'usersNum' => $this->usersNum,
                          'currentUsers' => $this->users,
                          'type' => 'left',
                      ];
    
                      if (!$socket->token){
                          echo date('Y-m-d H:i:s') . " 未初始化的连接 关闭连接leave" . PHP_EOL;
                      }else{
                          $token = $socket->token;
                          echo date('Y-m-d H:i:s') . " {$socket->$token}, {$socket->token} leave" . PHP_EOL;
                      }
                  }
              });
    
          });
          
          // 当$io启动后监听一个http端口,通过这个端口可以给任意user或者所有user推送数据
          $io->on('workerStart', function ($worker) use ($io) {
              // 监听一个http端口
              $api_url = Config::get('param.ws.apiHost');
              $inner_http_worker = new Worker($api_url);
              $inner_http_worker->onError = function($connection, $code, $msg)
              {
                  echo "error $code $msg\n";
              };
              // 当http客户端发来数据时触发
              $inner_http_worker->onMessage = function ($http_connection, $data) use ($io) {
                  $io->emit('message', 'messg251');
    
                  // 返回结果
                  return $http_connection->send('1');
              };
              // 执行监听
              $inner_http_worker->listen();
          });
          Worker::runAll();
      }
    private function init_connect_handle($msg, $io, $socket){
            // 验证token
            $token = $msg['token']??'';
            if ($token) {
                if (empty($socket->$token)) {
                    $socket->emit('message', [
                        'errcode' => 0,
                        'msg' => 'token' . $token,
                        'datas' => $token
                    ]);
                    $user_id = validation_token($token, true); // 不需要直接调用write_json
                    if (!$user_id){
                        $socket->emit('message', [
                            'errcode' => 1011,
                            'msg' => 'redis连接失败',
                            'datas' => $user_id
                        ]);
                        return ;
                    }
                    $socket->emit('message', [
                        'errcode' => 0,
                        'msg' => '$user_id' . $user_id,
                        'datas' => $user_id
                    ]);
    
                    if (!empty($user_id)) {
                        // 将当前客户端加入以他的用户名定义的group
                        $socket->join($user_id);
                        // 当前连接的上下文变量
                        $socket->$token = $user_id;
                        $socket->token = $token;
                        $socket->user_id = $user_id;
                        $socket->emit('message', [
                            'errcode' => 0,
                            'msg' => '初始化成功',
                            'datas' => []
                        ]);
                    } else {
                        $socket->emit('message', [
                            'errcode' => 0,
                            'msg' => '错误的token',
                            'datas' => []
                        ]);
                    }
                }else{
                    $socket->emit('message', [
                        'errcode' => 0,
                        'msg' => '该连接的token已经初始化',
                        'datas' => []
                    ]);
                }
            }else{
                $socket->emit('message', [
                    'errcode' => 0,
                    'msg' => 'token不能为空',
                    'datas' => []
                ]);
            }
        }
        private function init_connect($msg, $io, $socket){
            if (empty($socket)){
                return ;
            }
            try{
                $this->init_connect_handle($msg, $io, $socket);
            }catch (Exception $e){
                echo '打印错误信息';
                dump($e->getTraceAsString());
                echo '打印错误信息结束';
            }
    
        }
    
    opened by dly667 4
  • CORS issue

    CORS issue

    Hi, I'd like to set only trusted origins to the socket server so it won't be exposed to any origins.

    I usde $io->origins to allow the requests from my domain but it is still being exposed to any domains. Here's my code.

    $io = new SocketIO(2020, $context); $io->origins('https://mydomain.com:*'); $io->on('workerStart', function()use($io){ $io->adapter('\PHPSocketIO\ChannelAdapter'); });

    Are there any ways to fix the CORS issue with/without using $io->origins ?

    Thank you!

    opened by lotuspolarbear 7
Releases(v1.1.16)
Owner
walkor
walkor
High performance HTTP Service Framework for PHP based on Workerman.

webman High performance HTTP Service Framework for PHP based on Workerman. Manual https://www.workerman.net/doc/webman Benchmarks https://www.techempo

walkor 1.3k Jan 2, 2023
PHP Web Socket server

Important ⛔️ This project is no longer maintained ⛔️ We urge you to look for a replacement. Description WebSocket Server and Client library for PHP. W

Chris Tanaskoski 346 Nov 8, 2022
PHP Websocket Server that is compatible with socket.io

PHP SocketIO Server PHP Websocket Server that is compatible with socket.io So far the function use in this package is almost same with the naming in s

Cydrick Nonog 7 Dec 21, 2022
☄️ PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Serve

☄️ PHP CLI mode development framework, supports Swoole, WorkerMan, FPM, CLI-Server / PHP 命令行模式开发框架,支持 Swoole、WorkerMan、FPM、CLI-Server

Mix PHP 1.8k Dec 29, 2022
Asynchronous server-side framework for network applications implemented in PHP using libevent

phpDaemon https://github.com/kakserpom/phpdaemon Asynchronous framework in PHP. It has a huge number of features. Designed for highload. Each worker i

Vasily Zorin 1.5k Nov 30, 2022
Framework for building extensible server-side progressive applications for modern PHP.

Chevere ?? Subscribe to the newsletter to don't miss any update regarding Chevere. Framework for building extensible server-side progressive applicati

Chevere 65 Jan 6, 2023
An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols. PHP>=5.3.

Workerman What is it Workerman is an asynchronous event-driven PHP framework with high performance to build fast and scalable network applications. Wo

walkor 10.2k Dec 31, 2022
PHP HI-REL SOCKET TCP/UDP/ICMP/Serial .高可靠性PHP通信&控制框架SOCKET-TCP/UDP/ICMP/硬件Serial-RS232/RS422/RS485 AND MORE!

OHSCE高可靠性的PHP通信框架. Hey!I'm come back! 官方网站:WWW.OHSCE.ORG WWW.OHSCE.COM 最新版本V0.2.0.2 2017-05-10 开发者QQ群:374756165(新2016-09) 捐助: http://www.ohsce.com/ind

null 212 Dec 26, 2022
FreeSWITCH Event Socket Layer library for PHP

FreeSWITCH Event Socket Layer library for PHP Quickstart FreeSWITCH's Event Socket Layer is a TCP control interface enabling the development of comple

rtckit 2 May 10, 2022
FreeSWITCH's Event Socket Layer is a TCP control interface enabling the development of complex dynamic dialplans/workflows

Asynchronous Event Socket Layer library for PHP Quickstart FreeSWITCH's Event Socket Layer is a TCP control interface enabling the development of comp

rtckit 3 Oct 11, 2022
A collapsible side navigation menu built to seamlessly work with Bootstrap framework

yii2-widget-sidenav This widget is a collapsible side navigation menu built to seamlessly work with Bootstrap framework. It is built over Bootstrap st

Kartik Visweswaran 36 Apr 9, 2022
FrankenPHP is a modern application server for PHP built on top of the Caddy web server

FrankenPHP: Modern App Server for PHP FrankenPHP is a modern application server for PHP built on top of the Caddy web server. FrankenPHP gives superpo

Kévin Dunglas 2.8k Jan 2, 2023
Hprose asynchronous client & standalone server based on swoole

Hprose for Swoole Introduction Hprose is a High Performance Remote Object Service Engine. It is a modern, lightweight, cross-language, cross-platform,

Hprose 186 Sep 9, 2022
This package provides a high performance HTTP server to speed up your Laravel/Lumen application based on Swoole.

This package provides a high performance HTTP server to speed up your Laravel/Lumen application based on Swoole.

Swoole Taiwan 3.9k Jan 8, 2023
Async HTTP proxy connector, tunnel any TCP/IP-based protocol through an HTTP CONNECT proxy server, built on top of ReactPHP.

clue/reactphp-http-proxy Async HTTP proxy connector, tunnel any TCP/IP-based protocol through an HTTP CONNECT proxy server, built on top of ReactPHP.

Christian Lück 43 Dec 25, 2022
This package has framework agnostic Cross-Origin Resource Sharing (CORS) implementation.

Description This package has framework agnostic Cross-Origin Resource Sharing (CORS) implementation. It is complaint with PSR-7 HTTP message interface

null 60 Nov 9, 2022
Strict PSR-7 implementation used by the Slim Framework

Strict PSR-7 implementation used by the Slim Framework, but you may use it separately with any framework compatible with the PSR-7 standard.

Slim Framework 96 Nov 14, 2022
A multithreaded application server for PHP, written in PHP.

appserver.io, a PHP application server This is the main repository for the appserver.io project. What is appserver.io appserver.io is a multithreaded

appserver.io 951 Dec 25, 2022
Simple live support server with PHP Swoole Websocket and Telegram API

Telgraf Simple live support server with PHP Swoole Websocket and Telegram API. Usage Server Setup Clone repository with following command. git clone h

Adem Ali Durmuş 6 Dec 30, 2022