matviib/notifier
Composer 安装命令:
composer require matviib/notifier
包简介
NO LIBRARIES socket per page bridge for your Laravel application.
关键字:
README 文档
README
Base concepts
You don't need socket.io, pusher.js, jQuery, bootstrap, node.js, vue.js to start using this package.
This package can be used for sending data synchronously to each user.
This package sends data ONLY to named routes declared as GET.
You will get your own socket server on back-end and your clients will connect to it directly, without any third-party requests to be send.
You will have pretty notifications from scratch.
To view available routes you can run php artisan notifier:init show command. It will display available routes in the table and initiate the socket server.
| Code | Description |
|---|---|
event(new Notify($data)); |
- send to all routes. |
event(new Notify($data, $routes)); |
- send to routes in $routes array. |
event(new Notify($data, $routes, $users)); |
- send to routes in $routes and only to users in $users. |
Installation
composer require matviib/notifier
For Laravel < 5.5 add provider to config/app.php
MatviiB\Notifier\NotifierServiceProvider::class,
For publish notifier config file and js file for notifications out of the box:
php artisan vendor:publish
and choose "Provider: MatviiB\Notifier\NotifierServiceProvider" if requested.
Starting server
Add worker daemon for php artisan notifier:init process with Supervisor,
OR
Just run php artisan notifier:init in terminal.
If you use SSL you need add to your nginx configuration file to server block:
location /websocket {
proxy_pass http://<your-domain>:<port>; #server host and port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
# Timeout configuration.
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
Usage
At first you need to add @include('notifier::connect') before using socket.addEventListener() in your view or main layout to use it on ALL pages.
If you want use notifications from the scratch you need to add @include('notifier::connect_and_show') to the view.
Anywhere in your back-end add next event:
event(new Notify($data));
On front-end part add event listener
<script>
socket.addEventListener('message', function (event) {
console.log('Message from server', event.data);
});
</script>
Use built-in notifications.
Built-in notifications is a vue.js with vue-notifications plugin. If you already use vue.js in application you can just add this plugin yourself.
Mapping $data parameter.
| Parameter | Description |
|---|---|
'note' => 1, |
- use notes true |
| `'type' => 'warn | success |
'title' => 'TEXT' |
- title of the note |
'text' => 'Lorem ipsum' |
- note's body |
Positioning.
In config/notifier.php you can modify position where notifications will be shown.
// Horizontal options: left, center, right
// Vertical options: top, bottom
'position' => [
'vertical' => 'bottom',
'horizontal' => 'right'
]
Security
This package allows one way messages - only from server to client.
All messages from client after connecting will be ignored.
From server side messages protected with socket_pass parameter from notifier config.
Channels to users protected with unique hash.
Example with charts
After installation add to web.php
Route::get('chart', function () {
return view('chart');
})->name('chart');
create view /resources/views/chart.blade.php
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Chart</title>
</head>
<body>
<canvas id="myChart"></canvas>
@include('notifier::connect')
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<script type="text/javascript">
var data = [12, 19, 3, 17, 6, 3, 7, 45, 60, 25];
var myChart = new Chart(document.getElementById('myChart'), {
type: 'line',
data: {
labels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
datasets: [{
label: 'example',
data: data
}]
}
});
socket.addEventListener('message', function (event) {
myChart.data.datasets[0].data.splice(0, 1);
myChart.data.datasets[0].data.push(JSON.parse(event.data).data.value);
myChart.update();
});
</script>
</body>
</html>
In .env fix your APP_URL APP_URL=http://<<U APP URL>>
Create test command php artisan make:command Test
use MatviiB\Notifier\Events\Notify;
...
protected $signature = 'test';
public function handle()
{
while ($i < 100) {
$value = random_int(10, 100);
$data['value'] = $value;
event(new Notify($data, ['chart']));
usleep(rand(100000, 500000));
}
}
Run: php artisan notifier:init
Run in another shell: php artisan test
Open /chart page.
Usage Example
Send new values to chart on some page synchronously to each user:
event(new Notify($data, ['chart']));
Or to users with id 3 and 5: event(new Notify($data, ['chart'], [3, 5]));
matviib/notifier 适用场景与选型建议
matviib/notifier 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.18k 次下载、GitHub Stars 达 62, 最近一次更新时间为 2018 年 01 月 25 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「real-time」 「notifications」 「sockets」 「Socket」 「laravel」 「notifier」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 matviib/notifier 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 matviib/notifier 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 matviib/notifier 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Talk is a Laravel based realtime messaging, chatting and conversation system. It helps to develop users messaging, chatting and conversations in easy way.
A Laravel Nova package that adds a notification feed in your Nova app.
Synchronous Message Passing Framework for PHP
Thruway WAMP router core
Boxalino Real Time User Experience (RTUX) Magento2 plugin
Laravel package for generating Agora.io tokens (RTC, RTM, Chat) with support for both V1 and V2 token formats
统计信息
- 总下载量: 1.18k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 62
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-01-25