我在控制台上得到这个JS错误:
app.js:167未捕获的引用错误:未定义接收器ID
这是我的完整代码:
私家车控制员:
event(new PrivateMessageEvent($chat, $receiverId));
PrivateMessageEvent:
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use App\User;
use App\PrivateChat;
class PrivateMessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $privateChat, $receiverId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(PrivateChat $privateChat, $receiverId)
{
$this->privateChat = $privateChat;
$this->receiverId = $receiverId;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('private-chat.' . $this->receiverId);
}
}
Bootstrap.js
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
window.Echo.private(`private-chat.${receiverId}`)
.listen('PrivateMessageEvent', (e) => {
console.log(e);
});
频道。php
Broadcast::channel('private-chat.{receiverId}', function ($user, $receiverId) {
return true; // this is just for debugging to allow anyone to listen on this channel
//return $user->id === $receiverId;
});
拉威尔回声服务器。json
{
"authHost": "http://localhost",
"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": ""
}
在后台队列中:work和laravel echo服务器已在运行
触发该事件后,我在laravel echo服务器控制台上收到以下消息:
Channel: private-private-chat.
Event: App\Events\PrivateMessageEvent
CHANNEL private-private-chat.
笔记:
>
我成功地收听了公共频道。专用频道的唯一问题。
使用最新的Laravel版本,即5.4
我已经按照官方文件做了所有的事情:
https://laravel.com/docs/master/broadcasting
https://github.com/tlaverdure/laravel-echo-server
我还提出了关于github回购的问题:
https://github.com/tlaverdure/laravel-echo-server/issues/158
我已经花了10多个小时,尽我所能,但没有运气。
谢啦
尝试代替事件(新的PrivateMessageEvent($chat,$receiverId))
此
App\Events\PrivateMessageEvent::dispatch($chat, $receiverId);
尝试更改此行:
$this->$receiverId = $receiverId;
关于这一行:
$this->receiverId = $receiverId;
在PrivateMessageEvent _构造()中
更新:
尝试使用使用一个固定的频道id像这样:
window.Echo.private('private-chat.1')
我建议您也使用状态频道,它们也是私有的,但具有更多功能,即:
Echo.join('private-chat.1')
.listen('PrivateMessageEvent', (e) => {
console.log(e);
});
如果您使用的dinamic频道号与您使用的相同,即:
window.Echo.private(`private-chat.${receiverId}`)
你必须在javascript中给RecarverId
一个值,这个声明是一个通用的房间侦听器,但是应收ID应该被定义,${RecarverId}是一个字符串插值。
在导入应用程序之前,可以在模板中定义receiverId。js,例如,使用刀片语法:
<script>
receiverId = {{ $receiverId }};
</script>
另一个想法是:我想明确一点,在上面的所有代码中,接收者ID代表客户端想要加入的聊天/房间的ID,而不是接收用户的ID。
您可以将REDIS_PREFIX
设置为NULL
以删除前缀,否则如果它有值,则必须在echo服务器配置中设置keyPrefix
。
如果REDIS\u PREFIX
=NULL,则不要添加keyPrefix
。
重要通知
使用broadcastAs()
时,对listen(“”)
调用的调用必须以点开头
此时,使用keyPrefix
时的行为未知,如果您使用前缀设置,请评论DOT要求的结果。
https://laravel.com/docs/6.x/broadcasting#broadcast-名字
public function broadcastAs()
{
return 'server.created';
}
.listen('.server.created', function (e) {
....
});
我会自己检查DOT PREFIX组合,但我觉得如果我再继续工作,Laravel Echo会让我心脏病发作。
如果不使用broadcastAs()
,则命名将回退到事件类名称,在这种情况下没有插入点前缀,请参阅下面的设置:
拉威尔回声服务器。json
{
"host": "127.0.0.1",
"port": "6001",
"protocol": "http",
"database": "redis",
"databaseConfig": {
"redis": {
"host": "127.0.0.1",
"port": 6379,
"db": 0,
"keyPrefix": "VALUE OF REDIS_PREFIX"
}
}
/app/Events/MyExample。php
php prettyprint-override"><?php
namespace App\Events;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
class MyExample implements ShouldBroadcastNow
{
private $id;
public $payload;
public function __construct($id, $payload)
{
$this->id = $id;
$this->payload = $payload;
}
public function broadcastOn()
{
return new PrivateChannel('example.' . $this->id);
}
}
触发事件(PHP)
use App\Events\MyExample
$payload = [
'duck' => 'sauce',
'Bass' => 'Epic'
];
event(new MyExample($id, $payload))
侦听事件(JavaScript)
Echo.private(`example.${id}`).listen('MyExample', event => {
console.log('payload', event.payload)
})
我试图将zookeeper和kafka设置为共享名称空间中单独的Kubernetes部署/吊舱。我已经在我的Ubuntu沙盒上通过kubeadm用Calico引导了一个本地K8s 1.8... 所以我假设我的集群中有一个普通的网络问题,然后我注意到一些更让我困惑的事情...如果我将zookeeper.connect设置为10.107.41.148:2181(zookeeper服务的当前地址),连接
我正在为youtube api实现OAuth 2… 公共静态凭据authorize(列表范围,字符串credentialDatastore)引发IOException { } 它在本地工作。从逻辑上讲,我将回调URL更改为http://localhost:8081/CallBack..在本地工作正常,但当我使用公共IP部署到AWS服务器时,它不起作用。 显示地址已被用于8081异常,甚至没有重定向
我试图让机器人在公会中创建一个私人频道,但在JDA留档中找不到任何允许这种情况发生的东西。当调用时返回的ChannelAction在返回()。 目前,我正在努力创建一个文本频道,其中包括: 但我需要一个私人频道。我尝试过编写自己的方法,但它总是需要在JDA GuildController中实现它。JAVA我还研究了,但这是针对用户和机器人之间的DMs,我需要在服务器/公会中使用一个私有通道。 有什
试图调用不存在的方法。尝试是从以下位置进行的: 以下方法不存在: 3.如果您使用kafka版本2.5及以上版本,但却被2021-03-22 13:56:05.102-0400 org{local_sparta}WARN[data-pipeline,,,][DP-ACCOUNT][DPA][]annotationConfigServletWebServerApplicationContext:上下文
我想通过STS在Spring Boot中使用JPA和SQL Server。这是我的表: 马文 application.properties 模型.Account.class 接口账户 ServiceAccount.class 服务帐户类 我在控制器中调用了方法add帐户(),这是我得到的异常 "java.lang.NoClassDefFoundError: org/spingFramework/o
如果你喜欢系统管理员的工作,或者对这方面感兴趣,虚拟或者专用服务器可以让你完全控制自己的生产环境。 nginx 和 PHP-FPM PHP 通过内置的 FastCGI 进程管理器(FPM),可以很好的与轻量级的高性能 web 服务器 nginx 协作使用。nginx 比 Apache 占用更少内存而且可以更好的处理并发请求,这对于并没有太多内存的虚拟服务器尤其重要。 阅读更多 nginx 的内容