如何解决Laravel 回显服务器聊天消息通知只更新一次
我有一个用 Laravel 5.8 构建的网站,上面有实时(套接字)聊天功能。问题是当我从一个客户端发送消息时,除非您转到聊天窗口,否则另一个客户端会收到通知。一旦你阅读了一条消息,它就不会再被更新,除非你硬刷新网页。
这个问题发生在我使用 Redis、Socket.io、Laravel-echo Server 时。 但是当我将其更改为 Pusher 作为广播提供程序时,一切都很好。
我的 chatcontroller.PHP 如下所示:
<?PHP
namespace App\Http\Controllers;
use App\Http\Resources\Chat as ChatResource;
use App\Http\Resources\MarketplaceTrade as MarketplaceTradeResource;
use App\Models\Chat;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ChatController extends Controller
{
/**
* Get chat resource
*
* @param Chat $chat
* @return ChatResource
*/
public function get(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403,trans('chat.access_forbidden'));
}
$chat->load([
'participants' => function ($query) {
$query->where('user_id','!=',Auth::user()->id);
},'participants.user'
]);
return new ChatResource($chat);
}
/**
* Update user's participation.
*
* @param Chat $chat
*/
public function updateParticipation(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403,trans('chat.access_forbidden'));
} else {
$chat->updateParticipation(Auth::user());
}
}
/**
* @param Chat $chat
* @return MarketplaceTradeResource
*/
public function latestMarketplaceTrade(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403,trans('chat.access_forbidden'));
}
$Trade = $chat->marketplaceTrades()
->latest()->with('buyer','seller')
->first();
return new MarketplaceTradeResource($Trade);
}
/**
* Get status of chat for authenticated user
*
* @param Chat $chat
* @return array
*/
public function participation(Chat $chat)
{
if (!$chat->shouldAllowUser(Auth::user())) {
abort(403,trans('chat.access_forbidden'));
}
return $chat->getParticipation(Auth::user());
}
/**
* Return paginated result of authenticated chat
*
* @param Request $request
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function table(Request $request)
{
$chats = Auth::user()
->participatingChats()->latest('updated_at')
->with([
'participants' => function ($query) {
$query->where('user_id',Auth::user()->id);
},'participants.user'
]);
$filters = $request->get('filters',[]);
if (array_has($filters,'user') && $filters['user']) {
$chats->whereHas('participants.user',function ($query) use ($filters) {
$query->where('id',Auth::user()->id);
$query->where('name','like',"%{$filters['user']}%");
});
}
$results = paginateResult(
$chats,$request->get('itemPerPage',10),$request->get('page',1)
);
return ChatResource::collection($results);
}
}
我发现当我删除这部分时,应该收到通知的第二个客户端通常会收到通知:
->with([
'participants' => function ($query) {
$query->where('user_id','participants.user'
]);
有没有办法在不删除这部分的情况下使其工作?因为当我删除这部分聊天页面时,尽管聊天通知正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。