Phpactor Language Server

Overview

Phpactor Language Server

CI

This package provides a platform for building a Language Server according to the Language Server Specification

  • ✔️ Can run as either a TCP server or on STDIO.
  • ✔️ Multiple connections.
  • ✔️ Text document synchronization.
  • ✔️ Background services.
  • ✔️ Bi-directional requests.
  • ✔️ Commands.
  • ✔️ Request cancellation.
  • ✔️ Initialization handling.
  • ✔️ Up-to-date and self-instantiating protocol classes.

See the Language Server Specification for a list of methods which you can implement with this package.

Documentation

Documentation can be found on readthedocs.

Installing

$ composer require phpactor/language-server

Running the tests

With composer:

$ composer integrate

or:

$ ./vendor/bin/phpunit
$ ./vendor/bin/phpstan analyse
$ ./vendor/bin/php-cs-fixer fix

Built With

  • Amphp: Event-driven concurrency framework.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Contributing

This package is open source and welcomes contributions! Feel free to open a pull request on this repository.

Support

  • Create an issue on the main Phpactor repository.
  • Join the #phpactor channel on the Slack Symfony Devs channel.
Comments
  • Handle progress messages

    Handle progress messages

    Hi there,

    It's been a long time since have participated, I finally managed to free some of it so I'll try to catch up :smile: Switching to Neovim builtin LSP I realized that we don't handle the progress notification.

    This PR provide a first basic implementation and I would have liked your feedback opinion on different points:

    Server initiated progress

    A token obtained using the create request should only be used once (e.g. only one begin, many report and one end notification should be sent to it).

    I had the idea of adding a WorkDoneProgressTracker to follow the different progresses and be able to throw errors if we try to reuse a token but I wonder if it's not a bit "much". In addition it forces us to keep track of the different tokens and their state which might at some point begin to be a memory issue during long sessions so we will also have to deal with the cleanup of old tokens...

    I wonder if it would be interesting to provide a helper class for progress notification, which goal would be to either use the $/progress ou window/showMessage depending on the client capabilities. This way we can keep sending progress to the client even if it does not handle $/progress and we don't have to duplicate the logic every where. If so, how could I retrieve the client capabilities ? I remember back in the days we talked about some kind of "capabilities provider" that we could inject but I think we ended up injecting the capabilities required by a service directly instead ? How would you see this helper, as a standalone service with a dependency on the ClientApi and capability or as a "custom" client inside the ClientApi in which we inject the capability and gave the responsibility to instantiate the helper ?

    opened by camilledejoye 5
  • Fix error response objects not conforming to JSON-RPC 2.0

    Fix error response objects not conforming to JSON-RPC 2.0

    LspMessageSerializer and ResponseMessage::jsonSerialize are adding result property to a serialized response object data, which is not valid if there was an error invoking the method

    https://www.jsonrpc.org/specification#response_object

    opened by lumnn 4
  • Ignore unrecognized keys in `initializationOptions`

    Ignore unrecognized keys in `initializationOptions`

    I'm writing a new LSP client, and testing with phpactor. In addition, I'm also testing with Intelephense. In order to support Intelephense, my client passes the following in the initializationOptions parameter to the initialize message:

        initializationOptions =     {
            globalStoragePath = "/Users/siegel/path/to/intelephense-storage/global-storage";
            storagePath = "/Users/siegel/path/to/intelephense-storage/storage";
        };
    

    phpactor doesn't recognize the globalStoragePath or storagePath keys, and throws an exception.

    (I think there's a sound argument to be made that the names of these two keys are poorly chosen because they're prone to namespace collisions, but it wasn't my decision and I have no influence over Intelephense.)

    When these parameters are present, phpactor throws an exception, and then terminates as follows:

    2021-05-05 11:53:02.254: stderr output from server: [CRIT][229982.253487] Key(s) "storagePath", "globalStoragePath" are not known, known keys: "container.extension_classes", "console_dumper_default", "xdebug_disable", "command", "core.warn_on_develop", "core.min_memory_limit", "class_to_file.project_root", "class_to_file.brute_force_conversion", "code_transform.class_new.variants", "code_transform.template_paths", "code_transform.indentation", "code_transform.refactor.generate_accessor.prefix", "code_transform.refactor.generate_accessor.upper_case_first", "completion_worse.completor.class.limit", "completion_worse.disabled_completors", "completion_worse.name_completion_priority", "completion_worse.snippets", "completion_worse.experimantal", "completion.dedupe", "completion.dedupe_match_short_description", "completion.limit", "navigator.destinations", "navigator.autocreate", "rpc.store_replay", "rpc.replay_path", "source_code_filesystem.project_root", "worse_reflection.enable_cache", "worse_reflection.cache_lifetime", "worse_reflection.enable_context_location", "worse_reflection.cache_dir", "worse_reflection.stub_dir", "file_path_resolver.project_root", "file_path_resolver.app_name", "file_path_resolver.application_root", "file_path_resolver.enable_cache", "file_path_resolver.enable_logging", "logging.enabled", "logging.fingers_crossed", "logging.path", "logging.level", "logger.name", "logging.formatter", "composer.enable", "composer.autoloader_path", "composer.autoload_deregister", "composer.class_maps_only", "console.verbosity", "console.decorated", "extension_manager.extension_vendor_dir", "extension_manager.vendor_dir", "extension_manager.config_path", "extension_manager.extension_list_path", "extension_manager.root_package_name", "extension_manager.minimum_stability", "extension_manager.repositories", "extension_manager.quiet", "worse_reference_finder.plain_text_break_chars", "php.version", "language_server.catch_errors", "language_server.enable_workspace", "language_server.session_parameters", "language_server.method_alias_map", "language_server.diagnostic_sleep_time", "language_server.diagnostics_on_update", "language_server.diagnostics_on_save", "language_server.diagnostic_providers", "language_server,file_events", "language_server.file_event_globs", "language_server_completion.trim_leading_dollar", "language_server_reference_reference_finder.reference_timeout", "language_server_worse_reflection.workspace_index.update_interval", "language_server_code_transform.import_globals", "indexer.enabled_watchers", "indexer.index_path", "indexer.include_patterns", "indexer.exclude_patterns", "indexer.stub_paths", "indexer.poll_time", "indexer.buffer_time", "indexer.project_root", "indexer.reference_finder.deep", "indexer.implementation_finder.deep", "extension_manager.extension_vendor_dir", "extension_manager.vendor_dir", "extension_manager.config_path", "extension_manager.extension_list_path"[]
    
    Exception trace:
      at /Users/siegel/git/phpactor/vendor/phpactor/map-resolver/lib/Resolver.php:92
    
    2021-05-05 11:53:02.263: stderr output from server:  Phpactor\MapResolver\Resolver->resolve() at /Users/siegel/git/phpactor/vendor/phpactor/language-server-extension/lib/LanguageServer/Dispatcher/PhpactorDispatcherFactory.php:86
     Phpactor\Extension\LanguageServer\Dispatcher\PhpactorDispatcherFactory->buildContainer() at /Users/siegel/git/phpactor/vendor/phpactor/language-server-extension/lib/LanguageServer/Dispatcher/PhpactorDispatcherFactory.php:56
     Phpactor\Extension\LanguageServer\Dispatcher\PhpactorDispatcherFactory->createContainer() at /Users/siegel/git/phpactor/vendor/phpactor/language-server-extension/lib/LanguageServer/Dispatcher/PhpactorDispatcherFactory.php:33
     Phpactor\Extension\LanguageServer\Dispatcher\PhpactorDispatcherFactory->create() at /Users/siegel/git/phpactor/vendor/phpactor/language-server/lib/Core/Server/LanguageServer.php:210
     Phpactor\LanguageServer\Core\Server\LanguageServer->Phpactor\LanguageServer\Core\Server\{closure}() at n/a:n/a
     Generator->send() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Coroutine.php:118
     Amp\Coroutine->Amp\{closure}() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Internal/Placeholder.php:149
     Amp\Coroutine->resolve() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Coroutine.php:123
     Amp\Coroutine->Amp\{closure}() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Internal/Placeholder.php:149
     Amp\Promise@anonymous\/Users/siegel/git/phpactor/vendor/amphp/amp/lib/Deferred.php:22$374->resolve() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Deferred.php:52
     Amp\Deferred->resolve() at /Users/siegel/git/phpactor/vendor/amphp/byte-stream/lib/ResourceInputStream.php:109
     Amp\ByteStream\ResourceInputStream::Amp\ByteStream\{closure}() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Loop/Driver.php:119
     Amp\Loop\Driver->tick() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Loop/Driver.php:72
     Amp\Loop\Driver->run() at /Users/siegel/git/phpactor/vendor/amphp/amp/lib/Loop.php:95
     Amp\Loop::run() at /Users/siegel/git/phpactor/vendor/phpactor/language-server/lib/Core/Server/LanguageServer.php:113
     Phpactor\LanguageServer\Core\Server\LanguageServer->run() at /Users/siegel/git/phpactor/vendor/phpactor/language-server-extension/lib/LanguageServer/Command/StartCommand.php:59
     Phpactor\Extension\LanguageServer\Command\StartCommand->execute() at /Users/siegel/git/phpactor/vendor/symfony/console/Command/Command.php:256
     Symfony\Component\Console\Command\Command->run() at /Users/siegel/git/phpactor/vendor/symfony/console/Application.php:971
     Symfony\Component\Console\Application->doRunCommand() at /Users/siegel/git/phpactor/vendor/symfony/console/Application.php:290
     Symfony\Component\Console\Application->doRun() at /Users/siegel/git/phpactor/lib/Application.php:54
     Phpactor\Application->doRun() at /Users/siegel/git/phpactor/vendor/symfony/console/Application.php:166
     Symfony\Component\Console\Application->run() at /Users/siegel/git/phpactor/bin/phpactor:42
    

    I'd like to propose that while logging unrecognized parameters is a perfectly suitable debugging behavior when -vvv is specified on the command line, throwing an exception and terminating the server process is probably not the most compatible thing to do for clients.

    Would it be possible for phpactor to log (if -vvv is in effect) and then ignore unrecognized parameter keys (in any message)?

    opened by siegel 3
  • Remove null values from responses

    Remove null values from responses

    We had issues when the response contains null values. They aren't always handled properly by the clients but it seems that all clients checks if a nullable key exists or not. Therefore we might have less issues by simply removing them entirely.

    opened by camilledejoye 2
  • on ubuntu system php7.4 can't use composer require install

    on ubuntu system php7.4 can't use composer require install

    composer version

    Composer version 2.1.8 2021-09-15 13:55:14
    

    php version

    PHP 7.4.3 (cli) (built: Mar  2 2022 15:36:52) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
        with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
    

    php extensions

    image

    php origin author

    image

    composer command

    composer global require --ignore-platform-reqs --dev felixfbecker/language-server:dev-master
    
    Changed current directory to /home/vv/.config/composer
    Info from https://repo.packagist.org: #StandWithUkraine
    ./composer.json has been created
    Running composer update felixfbecker/language-server
    Loading composer repositories with package information
    Info from https://repo.packagist.org: #StandWithUkraine
    Updating dependencies
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Root composer.json requires felixfbecker/language-server dev-master -> satisfiable by felixfbecker/language-server[dev-master].
        - felixfbecker/language-server dev-master requires jetbrains/phpstorm-stubs dev-master -> found jetbrains/phpstorm-stubs[dev-master] but it does not match your minimum-stability.
    
    
    Installation failed, deleting ./composer.json.
    

    how fix it?

    opened by shuqiangzhou 1
  • emacs client gives null value for initializationOptions

    emacs client gives null value for initializationOptions

    I'm a bit unsure whether this belongs to emacs's emacs-lsp package or here.

    I've used emacs' lsp-php package and redefined the server command to use phpactor's lsp server.

    In the error, I can see this json is given as input

    {
      "jsonrpc": "2.0",
      "method": "initialize",
      "params": {
        "processId": 4543,
        "rootPath": "/home/mikael/workspace/lmt/project/",
        "rootUri": "file:///home/mikael/workspace/lmt/project/",
        "capabilities": {
          "workspace": {
            "applyEdit": true,
            "executeCommand": {
              "dynamicRegistration": true
            }
          },
          "textDocument": {
            "synchronization": {
              "willSave": true,
              "didSave": true,
              "willSaveWaitUntil": true
            },
            "documentSymbol": {
              "symbolKind": {
                "valueSet": [
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  24,
                  25
                ]
              },
              "hierarchicalDocumentSymbolSupport": true
            },
            "formatting": {
              "dynamicRegistration": true
            },
            "codeAction": {
              "dynamicRegistration": true
            },
            "completion": {
              "completionItem": {
                "snippetSupport": true
              }
            }
          }
        },
        "initializationOptions": null
      },
      "id": 1
    }
    

    Resulting in this error

    [2018-10-23 13:47:29] phpactor.ERROR: Argument 2 passed to Phpactor\LanguageServer\Extension\Core\Initialize::__invoke() must be of the type array, null given, ca
    

    an array is expected as second argument (https://github.com/phpactor/language-server/blob/f81fd9aba7639b72260df45b1e123fca275e946a/lib/Extension/Core/Initialize.php#L40)

    opened by kermorgant 1
  • handle infinite loop situations

    handle infinite loop situations

    currently shutting down isn't possible when the server gets into certain invalid states (i.e. when trying to read headers that are never coming, or waiting for the wrong information).

    opened by dantleech 1
  • Fixing the command line arguments

    Fixing the command line arguments

    and adding documentation on how to invoke the serve.php

    Problem

    First I couldn't figure out how to run the command. And it turns out that using the short options wasn't supported.

    Secondly a usage section is always nice to have if running the program with no arguments (like in this case) is not possible.

    opened by mamazu 0
  •  Fix #1304 - Dynamic registration only if supported

    Fix #1304 - Dynamic registration only if supported

    Proposal to fix https://github.com/phpactor/phpactor/issues/1304 Should also fix https://github.com/phpactor/phpactor/issues/1311

    Before dynamically registering the new capability, first make sure the client accept dynamic registration for this capability.

    TODO: update https://github.com/phpactor/language-server-extension/pull/25 if/when merged

    opened by camilledejoye 0
  • PHP Fatal error:  Uncaught Error: Cannot instantiate interface Phpactor\LanguageServer\Core\Server\Transmitter\MessageFormatter in ***/language-server/bin/proxy:48

    PHP Fatal error: Uncaught Error: Cannot instantiate interface Phpactor\LanguageServer\Core\Server\Transmitter\MessageFormatter in ***/language-server/bin/proxy:48

    just trying example from documentation. echo '{"id":1,"method":"foobar","params":[]}' | ./bin/proxy request | php example/server/minimal.php then got error: PHP Fatal error: Uncaught Error: Cannot instantiate interface Phpactor\LanguageServer\Core\Server\Transmitter\MessageFormatter in ***/language-server/bin/proxy:48 Stack trace: #0 {main} thrown in ***/language-server/bin/proxy on line 48 my php-version is : PHP 8.0.11

    opened by gvanbeck 2
  • Windows support (issues with pcntl extension)

    Windows support (issues with pcntl extension)

    I was looking for an alternative to felixfbecker/php-language-server in VSCode, since it seems a bit abandoned (latest commit was 12 Dec 2018).

    I've found phpactor/vscode-phpactor extension and tried it, but it won't even start. I've patched the extension to let the server start (Windows path were not taken into account to let the server start...), and I've found that it crashes immediately on my Win10-x64.

    First error:

    PHP Warning:  Use of undefined constant SIGINT - assumed 'SIGINT' (this will throw an Error in a future version of PHP) in C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php on line 101
    Warning: Use of undefined constant SIGINT - assumed 'SIGINT' (this will throw an Error in a future version of PHP) in C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php on line 101
    PHP Fatal error:  Uncaught TypeError: Argument 1 passed to Amp\Loop::onSignal() must be of the type int, string given, called in C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php on line 104 and defined in C:\src\phpactor\vendor\amphp\amp\lib\Loop.php:241
    Stack trace:
    #0 C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php(104): Amp\Loop::onSignal('SIGINT', Object(Closure))
    #1 C:\src\phpactor\vendor\phpactor\language-server-extension\lib\LanguageServer\Command\StartCommand.php(59): Phpactor\LanguageServer\Core\Server\LanguageServer->run()
    #2 C:\src\phpactor\vendor\symfony\console\Command\Command.php(299): Phpactor\Extension\LanguageServer\Command\StartCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #3 C:\src\phpactor\vendor\symfony\console\Application.php(978): Symfony\Component\Conso in C:\src\phpactor\vendor\amphp\amp\lib\Loop.php on line 241
    Fatal error: Uncaught TypeError: Argument 1 passed to Amp\Loop::onSignal() must be of the type int, string given, called in C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php on line 104 and defined in C:\src\phpactor\vendor\amphp\amp\lib\Loop.php:241
    Stack trace:
    #0 C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php(104): Amp\Loop::onSignal('SIGINT', Object(Closure))
    #1 C:\src\phpactor\vendor\phpactor\language-server-extension\lib\LanguageServer\Command\StartCommand.php(59): Phpactor\LanguageServer\Core\Server\LanguageServer->run()
    #2 C:\src\phpactor\vendor\symfony\console\Command\Command.php(299): Phpactor\Extension\LanguageServer\Command\StartCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #3 C:\src\phpactor\vendor\symfony\console\Application.php(978): Symfony\Component\Conso in C:\src\phpactor\vendor\amphp\amp\lib\Loop.php on line 241
    

    These errors are due to missing SIGINT, defined in pcntl extension, which is not available on Windows.

    I've added define ("SIGINT", 2); in \vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php and checked again:

    # bin/phpactor language-server -vvv
    Starting language server, use -vvv for verbose output
    
    In NativeDriver.php line 91:
    
      [Amp\Loop\UnsupportedFeatureException]
      Signal handling requires the pcntl extension
    
    
    Exception trace:
      at C:\src\phpactor\vendor\amphp\amp\lib\Loop\NativeDriver.php:91
     Amp\Loop\NativeDriver->onSignal() at C:\src\phpactor\vendor\amphp\amp\lib\Loop.php:243
     Amp\Loop::onSignal() at C:\src\phpactor\vendor\phpactor\language-server\lib\Core\Server\LanguageServer.php:104
     Phpactor\LanguageServer\Core\Server\LanguageServer->run() at C:\src\phpactor\vendor\phpactor\language-server-extension\lib\LanguageServer\Command\StartCommand.php:59
     Phpactor\Extension\LanguageServer\Command\StartCommand->execute() at C:\src\phpactor\vendor\symfony\console\Command\Command.php:299
     Symfony\Component\Console\Command\Command->run() at C:\src\phpactor\vendor\symfony\console\Application.php:978
     Symfony\Component\Console\Application->doRunCommand() at C:\src\phpactor\vendor\symfony\console\Application.php:295
     Symfony\Component\Console\Application->doRun() at C:\src\phpactor\lib\Application.php:54
     Phpactor\Application->doRun() at C:\src\phpactor\vendor\symfony\console\Application.php:167
     Symfony\Component\Console\Application->run() at C:\src\phpactor\bin\phpactor:42
    
    language-server [--address ADDRESS] [--no-loop]
    

    The same behavior should be reproduced on non-Windows systems by disabling the pcntl extension.

    opened by nicorac 0
  • language-server should require the pcntl extension.

    language-server should require the pcntl extension.

    Since the project uses constants predefined by the pcntl extension, it should be added to the composer.json file ("ext-pcntl": "*") as requirements. The pcntl extension is not enabled by default.

    opened by dobryak 4
  • Middleware Refactor

    Middleware Refactor

    • All handlers should be session based
    • Dispatcher should be the extension point of the server
    • Handlers should be implemented as middlewares
    • Middlewares are however an implementation detail of the Dispatcher implementation.

    Example:

    • The existing "system handlers" can be made into middlewares
    • The exisitng handler decorators transition well to middlewares.
    • The (for example) Phpactor implementation can be implemented as a middleware - replacing the "HandlerLoader" interface.

    Consequences:

    • Middlewares can be instantiated per session with necessary dependencies: can stop passing special dependencies as method arguments.
    opened by dantleech 0
  • Index files in looping

    Index files in looping

    I use coc.nvim on index showing a message "Indexed n/n", when it completes 100% it ends up indexing again and returns to 1%.

    NeoVim

    NVIM v0.4.3
    Build type: Release
    LuaJIT 2.0.5
    Compilation: /usr/bin/cc -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -O2 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim/src/build/config -I/build/neovim/src/neovim-0.4.3/src -I/usr/include -I/build/neovim/src/build/src/nvim/auto -I/build/neovim/src/build/include
    Compiled by builduser
    
    Features: +acl +iconv +tui
    See ":help feature-compile"
    
       system vimrc file: "$VIM/sysinit.vim"
      fall-back for $VIM: "/usr/share/nvim"
    
    Run :checkhealth for more info
    

    Project image

    coc-settings.json image

    opened by afranioce 1
Owner
Phpactor
PHP Refactoring and Introspection tool
Phpactor
Zephir is a compiled high level language aimed to the creation of C-extensions for PHP.

Zephir - is a high level programming language that eases the creation and maintainability of extensions for PHP. Zephir extensions are exported to C c

Zephir Language 3.2k Dec 27, 2022
Motan - a cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services

Motan-PHP Overview Motan is a cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.

Weibo R&D Open Source Projects 81 Nov 19, 2022
Jin microservices is a complete microservice demo based on PHP language + hyperf microservices framework

介绍 Jin-microservices是基于 php 语言 + hyperf 微服务 框架的完整微服务demo。 github:https://github.com/Double-Jin/jin-microservices gitee:https://gitee.com/ljj96/jin-mic

null 114 Dec 29, 2022
Provides TemplateView and TwoStepView using PHP as the templating language, with support for partials, sections, and helpers.

Aura View This package provides an implementation of the TemplateView and TwoStepView patterns using PHP itself as the templating language. It support

Aura for PHP 83 Jan 3, 2023
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
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
A pocketmine-mp server that we develop live on Twitch every Saturday from 8pm to 10pm (FR)

Server A pocketmine-mp server that we develop live on Twitch every Saturday from 8pm to 10pm (FR) Contributing Pull requests are welcome. For major ch

Gaëtan H 11 Oct 9, 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
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
Simple WebSocket server implemented in PHP.

Bloatless PHP WebSockets Simple WebSocket server implemented in PHP. Installation Requirements Installation procedure Usage Server Applications Timers

bloatless.org 556 Dec 25, 2022
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
A easy way to install your basic yii projetc, we have encrypt database password in phpfile, my class with alot funtions to help you encrypt and decrypt and our swoole server install just run ./yii swoole/start and be happy!

Yii 2 Basic Project Template with swoole and Modules Yii 2 Basic Project Template is a skeleton Yii 2 application best for rapidly creating small proj

null 3 Apr 11, 2022
jojo, another http server written in PHP 8.0

جوجو | jojo جوجو، وب‌سروری در ابعاد جوجه برای کارهای کوچک داستان نوشتن جوجو وب‌سروری که تنظیمات مودم TP-link TD-8811 توی اتاقم رو serve میکنه اسمش mic

Amirhossein Baghaie 6 Dec 25, 2022
Socks5 proxy server written in Swoole PHP

php-socks This is a Socks5 proxy server implementation built with PHP & Swoole. To start the proxy server, clone this repo, run composer install to in

Nazmul Alam 3 Jan 23, 2022
TCP Worker Client for RoadRunner 2.0 application server

RoadRunner TCP Plugin RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supp

Spiral Scout 8 Nov 26, 2022
💾 High-performance PHP application server, load-balancer and process manager written in Golang. RR2 releases repository.

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Spiral Scout 45 Nov 29, 2022
🤯 High-performance PHP application server, load-balancer and process manager written in Golang

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Spiral Scout 6.9k Jan 3, 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
A server side alternative implementation of socket.io in PHP based on workerman.

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 pr

walkor 2.1k Jan 6, 2023