我想触发一个事件到Pusher私有频道,我的服务器端语言是Laravel。我查阅了很多资源,但我没有找到一个全面的方法来覆盖服务端和前端。最后我找到了这个解决方案。 第一步:
export const SendChat = () => {
try {
var pusher = new Pusher('YOUR_APP_KEY', {
cluster: 'ap2',
forceTLS: true,
authTransport: 'jsonp',
authEndpoint: `${baseUrl}pusher/auth`,
});
var channel = pusher.subscribe('private-channel');
channel.bind('pusher:subscription_succeeded', function() {
var triggered = channel.trigger('client-EVENT_NAME', { 'message': 'Hi ....' });
console.log(triggered)
});
} catch (error) {
console.error(error);
}
}
并在某处调用它
<Button onClick={this.props.SendChat} waves='light' >Send</Button>
您必须在Pusher帐户设置中启用客户端事件
login to your pusher account -> select the channel ->App Settings -> select Enable client events -> update
在此之后添加您的应用程序密钥、频道名称和事件名称,然后我们需要在服务器端进行授权。这是示例 Laravel 代码,首先在 web.php 中添加此路由。
添加您的应用程序密钥、频道名称和事件名称,然后我们需要在服务器端进行授权。这是示例 Laravel 代码,首先在 web.php 中添加此路由。
Route::get('pusher/auth', 'PusherController@pusherAuth');
将 PusherController.php 修改为以下内容:
public function pusherAuth()
{
$user = auth()->user();
if ($user) {
$pusher = new Pusher('auth_key', 'secret', 'app_id');
$auth= $pusher->socket_auth(Input::get('channel_name'), Input::get('socket_id'));
$callback = str_replace('\\', '', $_GET['callback']);
header('Content-Type: application/javascript');
echo($callback . '(' . $auth . ');');
return;
}else {
header('', true, 403);
echo "Forbidden";
return;
}
}
测试一下,你应该能看到像这样的东西
Pusher : State changed : connecting -> connected with new socket ID 3953.****556
Pusher : Event sent : {"event":"pusher:subscribe","data":{"auth":"83045ed1350e63c912f5:328fb78165d01f7d6ef3bb6d4a30e07c9c0ad0283751fc2c34d484d4fd744be2","channel":"private-chat"}}
Pusher : Event sent : {"event":"client-MessageSent","data":{"message":"Hi ...."},"channel":"private-chat"}
true