Я использую этот репозиторий для управления веб-сокетами на Laravel https://github.com/beyondcode/laravel-websockets
Кроме того, я использую последнюю версию всего, Laravel, Laravel Эхо, Ax ios и т. Д. И т. П.
Мой сервер является сервером 2-го (или 3-го?) Уровня Digital Ocean (4 ГБ ОЗУ, 80 ГБ, 2 ВЦП), управляемым через Laravel Forge.
Я на 100% основал свою конфигурацию Forge на этом руководстве https://alex.bouma.dev/installing-laravel-websockets-on-forge/
Один из моих клиентов сообщил, что в какой-то момент они не получали никаких обновлений для внесения изменений в Модуль встреч, ему пришлось обновить страницу sh, чтобы она снова заработала.
Странная часть в том, что он все еще получал сообщения от небольшого модуля чата, который есть в моем приложении и основывается на том же принципе.
Это немного кода: Мой Vue файл:
/**
* Starts listening to update appointments events.
*
*/
updateAppointments() {
Echo.channel(`update-appointments.${this.office_id}`)
.listen('.list.new.appointments', (event) => {
if (!this.isEditingAppointment) {
this.checkAppointments();
} else {
this.pendingUpdateFlag = true;
}
})
.listen('.list.updated.dates', (event) => {
this.listDates(false);
})
.listen('.list.updated.entities', (event) => {
this.listEntities();
})
.listen('.list.updated.locations', (event) => {
this.listLocations();
this.listAppointments();
});
}
Каналы. php:
// Appointments events
Broadcast::channel('update-appointments.{officeId}', function ($user, $officeId) {
return ($user->hasPermission('appointments') && $user->office_id === $officeId);
});
И одно из событий, AppointmentEvent. php:
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class AppointmentEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $officeId;
/**
* Create a new event instance.
*
* @param int $officeId
* @return void
*/
public function __construct($officeId)
{
$this->officeId = $officeId;
}
/**
* The event's broadcast name.
*
* @return string
*/
public function broadcastAs()
{
return 'list.new.appointments';
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('update-appointments.' . $this->officeId);
}
}
Как примечание, я вынужден подписать пользователей на обычные каналы, так как частные не будут работать когда параметр включен в название канала (например, this.office_id), это происходит либо с Laravel Websockets, либо со старым методом Echo + Socket.io + redis, который я использовал в прошлом.
SMALL UPDATE: Когда я писал это сообщение, тот же клиент сообщил, что он не получил некоторые сообщения чата, я спросил его, может быть, отправитель набрал оба сообщения очень быстро или что-то в этом роде, возможно, сервер поддельного толкателя недостаточно быстр, чтобы действительно обновлять сообщения. короткие периоды времени? но да, Websockets сейчас не надежен.
Может быть, это как-то связано с тем, как я настроил Websockets на моем сервере forge? недостаточно ресурсов выделено? но, честно говоря, это странно, потому что сейчас, вероятно, менее 10 человек используют приложение, так как оно находится на стадии тестирования.
Я надеюсь, что вы можете дать мне решение этой проблемы.
Заранее спасибо.