我正在开发一个以Vuetify(Vue.js)为前端的应用程序,该应用程序通过api与laravel后端服务器进行通信。
我试图使一个系统的通知与laravel-echo-server与socket.io.并使用laravel-echo到客户端。
我在客户端组件中用于测试连接是否工作的代码是:
// Needed by laravel-echo
window.io = require('socket.io-client')
let token = this.$store.getters.token
let echo = new Echo({
broadcaster: 'socket.io',
host: 'http://localhost:6001',
auth: {
headers: {
authorization: 'Bearer ' + token,
'X-CSRF-TOKEN': 'too_long_csrf_token_hardcoded'
}
}
})
echo.private('Prova').listen('Prova', () => {
console.log('IT WORKS!')
})
这是laravel echo服务器的代码。json
{
"authHost": "http://gac-backend.test",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}
我试图修改aporigins,但没有成功。事件已调度,我可以在laravel echo服务器日志中看到它:
Channel: Prova
Event: App\Events\Prova
但在此之后,当我访问包含连接代码的客户端组件时,我可以在laravel echo server中看到该组件记录了很长的错误跟踪和下一个错误:
The client cannot be authenticated, got HTTP status 419
如您所见,我在laravel echo客户端的头中指定了csrf令牌和授权令牌。但它不起作用。
这是路线/通道的代码。php
:
Broadcast::channel('Prova', function ($user) {
return true;
});
我只想听一个事件,它是私人的还是公共的并不重要,因为当它起作用时,我想把它放到服务人员身上。那么,我想如果是公开的,那就更好了。
对于套接字io
npm安装socket.io
如果你得到了无效的帧头设置身份验证终端bootstrap.js如下
窗口。Echo=新的Echo({authEndpoint:'http://project/broadcasting/auth,广播员:'pusher',密钥:'63882dbaf334b78ff949',集群:'ap2',加密:true})
为了启动客户端侦听器,我使用了Vuex。然后,当我的应用程序启动时,我调度actionINIT\u CHANNEL\u监听器
来启动监听器。
index.js通道模块vuex
import actions from './actions'
import Echo from 'laravel-echo'
import getters from './getters'
import mutations from './mutations'
window.io = require('socket.io-client')
export default {
state: {
channel_listening: false,
echo: new Echo({
broadcaster: 'socket.io',
// host: 'http://localhost:6001'
host: process.env.CHANNEL_URL
}),
notifiable_public_channels: [
{
channel: 'Notificacio',
event: 'Notificacio'
},
{
channel: 'EstatRepetidor',
event: 'BroadcastEstatRepetidor'
}
]
},
actions,
getters,
mutations
}
行动。通道模块vuex的js
import * as actions from '../action-types'
import { notifyMe } from '../../helpers'
// import { notifyMe } from '../../helpers'
export default {
/*
* S'entent com a notifiable un event que té "títol" i "message" (Per introduir-los a la notificació)
* */
/**
* Inicialitza tots els listeners per als canals. Creat de forma que es pugui ampliar.
* En cas de voler afegir més canals "Notifiables" s'ha de afegir un registre al state del index.js d'aquest modul.
* @param context
*/
[ actions.INIT_CHANNEL_LISTENERS ] (context) {
console.log('Initializing channel listeners...')
context.commit('SET_CHANNEL_LISTENING', true)
context.getters.notifiable_public_channels.forEach(listener => {
context.dispatch(actions.INIT_PUBLIC_NOTIFIABLE_CHANNEL_LISTENER, listener)
})
// }
},
/**
* Inicialitza un event notificable a través d'un canal.
* Per anar bé hauria de tenir un titol i un missatge.
* @param context
* @param listener
*/
[ actions.INIT_PUBLIC_NOTIFIABLE_CHANNEL_LISTENER ] (context, listener) {
context.getters.echo.channel(listener.channel).listen(listener.event, payload => {
notifyMe(payload.message, payload.title)
})
}
}
帮助程序中的notifyMe函数,该函数在浏览器上发送通知
export function notifyMe (message, titol = 'TITLE', icon = icon) {
if (!('Notification' in window)) {
console.error('This browser does not support desktop notification')
} else if (Notification.permission === 'granted') {
let notification = new Notification(titol, {
icon: icon,
body: message,
vibrate: [100, 50, 100],
data: {
dateOfArrival: Date.now(),
primaryKey: 1
}
})
}
然后后端使用laravel-echo-server,如问题所示。使用redis对事件进行排队,并在服务器启动时启动laravel-echo-server。
您好,我将向您介绍如何使用Laravel和Echo功能配置VUE的整个步骤
步骤1:首先安装laravel
composer create-project laravel/laravel your-project-name 5.4.*
设置变量更改Broadcastservicegie
我们首先需要注册App\Providers\BroadcastServiceProvider
。打开config/app。php
并取消对providers数组中的下一行的注释。
// App\Providers\BroadcastServiceProvider
我们需要告诉拉威尔,我们正在使用推进器驱动程序。环境文件:
BROADCAST_DRIVER=pusher
在config/app中添加pusher类。php
'Pusher' => Pusher\Pusher::class,
第3步向你的laravel项目添加一个推进器
composer require pusher/pusher-php-server
将以下内容添加到配置/broadcasting.php
'options' => [
'cluster' => env('PUSHER_CLUSTER'),
'encrypted' => true,
],
步骤5设定推杆变量
PUSHER_APP_ID=xxxxxx
PUSHER_APP_KEY=xxxxxxxxxxxxxxxxxxxx
PUSHER_APP_SECRET=xxxxxxxxxxxxxxxxxxxx
PUSHER_CLUSTER=xx
步骤6安装节点
npm install
步骤7安装推进器js
npm install --save laravel-echo pusher-js
步骤8:取消以下操作
// resources/assets/js/bootstrap.js
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'xxxxxxxxxxxxxxxxxxxx',
cluster: 'eu',
encrypted: true
});
创建迁移之前的步骤9
// app/Providers/AppServiceProvider.php
// remember to use
Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
我试图在Java项目中创建一个graphql客户机,我正在使用apollographql库。问题是,我无法使用版本不同于中央存储库的pom.xml获得依赖关系。另一件事是所有的例子都是用Gradle构建的。关于如何使用apollo库和maven项目创建一个简单的订阅客户机,您有什么示例或想法吗?我遇到的一个具体问题是,一旦下载了apollographql-runtime库,就没有“订阅”包了。我想
我开始着手一个JavaFX项目,在这个项目中,我想添加一个复制的文本,而不必更改驱动程序中的格式和图像(它应该像open office一样工作)。图像应该能够放置在文本中不同的位置。因此,我需要一个可以处理rtf格式的控制字段。 为此,我找到了RichTextFX。文档中解释了如何使用Maven或Grandle运行RichTextFX。我不使用Maven或Grandle,因此我想知道是否有可能在不
我最近开始使用android Studio3.1.2和SDK19(Android4.4)编写我真正的第一个android项目。
在Vue项目实现文件下载的时候遇到一个问题,无论是使用a标签还是使用windown.open(url)都只会在网页打开预览,但是都不能下载,请问这是什么问题?应该如何去避免从而实现下载功能呢?查了好久资料,来来去去都是那一片文章抄来抄去,实在让人难受!!!这些粘贴怪真恶心!!!
更新!!!! 观看缩进!我的插件部分在我的代码编辑器中缩进,因此它作为包主题的一部分读取。现在我至少有一个插件在工作,我觉得有点理智。现在开始调试另一个... 谢谢,留下这个以防其他人犯同样的错误! 作为参考: MKDocs 1.0.4 Pip 19.2.3 Python 3.8.1 很抱歉没有发布原始代码,因为这可能会有所帮助,因为需要另一个同事开发人员才能为我注意到这一点。 原帖子: 我不太确
我有一个运行在j2ee服务器(jboss 4.0.4)上的axis2 web服务客户端,该服务器一直在使用tomcat上托管的web服务。最近tomcat管理员打开了TLS,现在我的axis2客户端无法工作。如何为axis2客户端打开TLS? 谢谢你的帮助!