开源软件名称(OpenSource Name):garveen/laravoole开源软件地址(OpenSource Url):https://github.com/garveen/laravoole开源编程语言(OpenSource Language):PHP 100.0%开源软件介绍(OpenSource Introduction):LaravooleLaravel on Swoole Or Workerman 10x faster than php-fpm Depends On
Suggests
InstallTo get started, add laravoole to you composer.json file and run
or just run shell command: composer require garveen/laravoole Once composer done its job, you need to register Laravel service provider, in your config/app.php:
Notice: You should NOT use file session handler, because it is not stable at this environement. Use redis or other handler instead. Usagephp artisan laravoole [start | stop | reload | reload_task | restart | quit] MigrationsUpgrade to 0.4Event names has changed:
ConfigTo generate php artisan vendor:publish --provider="Laravoole\LaravooleServiceProvider" Most of things can be configured with [
'base_config' => [
'host' => '0.0.0.0',
]
] is equals with LARAVOOLE_HOST=0.0.0.0 EventsYou can handle events by editing public function boot()
{
parent::boot();
\Event::listen('laravoole.requesting', function ($request) {
\Log::info($request->segments());
});
}
base_configThis section configures laravoole itself. mode
user defined wrappersYou can make a new wrapper implements pid_fileDefines a file that will store the process ID of the main process. deal_with_publicWhen using Http mode, you can turn on this option to let laravoole send static resources to clients. Use this ONLY when developing. host and portDefault handler_configThis section configures the backend, e.g. SwooleAs an example, if want to set worker_num to 8, you can set LARAVOOLE_WORKER_NUM=8 or set [
'handler_config' => [
'worker_num' => 8,
]
] See Swoole's document: WorkermanAs an example, if want to set worker_num to 8, you can set LARAVOOLE_COUNT=8 or set [
'handler_config' => [
'count' => 8,
]
] See Workerman's document: Websocket UsageSubprotocolsSee Mozilla's Document: Writing WebSocket server The default subprotocol is jsonrpc, but has some different:
You can define your own subprotocol, by implements Client Example:<!DOCTYPE html>
<meta charset="utf-8" />
<title>WebSocket Test</title>
<style>
p{word-wrap: break-word;}
tr:nth-child(odd){background-color: #ccc}
tr:nth-child(even){background-color: #eee}
</style>
<h2>WebSocket Test</h2>
<table><tbody id="output"></tbody></table>
<script>
var wsUri = "ws://localhost:9050/websocket";
var protocols = ['jsonrpc'];
var output = document.getElementById("output");
function send(message) {
websocket.send(message);
log('Sent', message);
}
function log(type, str) {
str = str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');
output.insertAdjacentHTML('beforeend', '<tr><td>' + type + '</td><td><p>' + htmlEscape(str) + '</p></td></tr>');
}
websocket = new WebSocket(wsUri, protocols);
websocket.onopen = function(evt) {
log('Status', "Connection opened");
send(JSON.stringify({method: '/', params: {hello: 'world'}, id: 1}));
setTimeout(function(){ websocket.close() },1000)
};
websocket.onclose = function(evt) { log('Status', "Connection closed") };
websocket.onmessage = function(evt) { log('<span style="color: blue;">Received</span>', evt.data) };
websocket.onerror = function(evt) { log('<span style="color: red;">Error</span>', evt.data) };
</script>
</html> Work with nginxserver {
listen 80;
server_name localhost;
root /path/to/laravel/public;
location / {
try_files $uri $uri/ @laravoole;
index index.html index.htm index.php;
}
# http
location @laravoole {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:9050;
}
# fastcgi
location @laravoole {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9050;
}
# websocket
# send close if there has not an upgrade header
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /websocket {
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
proxy_pass http://127.0.0.1:9050;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
} License |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论