Ổ cắm io php ấu trùng

Nói chung cuộc sống éo le đưa mình tới websockets nhưng sau khi cài xong thì thấy "ok" cũng ko tệ. ))

Cài đặt công việc ta cần làm.
Bước 1. Xây dựng phiên bản EC2, có mã nguồn để giữ 1 con websockets chắc chắn kết nối tới tất cả máy khách.
Bước 2. Nếu ứng dụng của bạn sử dụng HTTPS thì bạn phải cài đặt TLS cho websocket ở đây mình sử dụng ALB của AWS để tạo.
Bước 3. Cần 1 tên miền phụ để kết nối với ALB tại đây mình dùng Route 53 để tạo rồi kết nối với ALB.


Ở đây mình con như bạn đã có 1 con server web hoàn chỉnh rồi còn cần cài websocket nữa thôi thôi. Chúng ta sẽ đi vào từng bước

Bước 1. Cài đặt trên EC2


Cài đặt gói

composer require beyondcode/laravel-websockets

Gói sẽ tự động đăng ký nhà cung cấp dịch vụ.
Gói này đi kèm với một sự chuyển đổi để lưu trữ thông tin bảng kê trong khi chạy máy chủ WebSocket của bạn. Bạn có thể xuất bản di chuyển tệp bằng cách sử dụng.

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"

chạy di chuyển

php artisan migrate

Tiếp theo, bạn cần xuất tệp cấu hình WebSocket

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"

Cài đặt Pusher (ở đây chúng ta vẫn dùng config như Pusher only là không kết nối được với server của Pusher thôi nhé. Đ)

composer require pusher/pusher-php-server

trong tập tin. env  thêm những phần mà cấu hình trong pusher bạn có thể điền bất cứ thứ gì vào đó cũng được.

PUSHER_APP_ID=<id tự định nghĩa là 1 string>
PUSHER_APP_KEY=<KEY tự định nghĩa là 1 string>
PUSHER_APP_SECRET=<SECRET tự định nghĩa là 1 string>
PUSHER_APP_CLUSTER=<CLUSTER tự định nghĩa là 1 string>
BROADCAST_DRIVER=pusher
PUSHER_SCHEMA=https
PUSHER_USE_TLS=true
PUSHER_HOST='subdomain tạo ở bước 3'


in config/broadcasting. cấu hình php ta

'pusher' => [
    'driver' => 'pusher',
    'key' => env('PUSHER_APP_KEY'),
    'secret' => env('PUSHER_APP_SECRET'),
    'app_id' => env('PUSHER_APP_ID'),
    'options' => [
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => env('PUSHER_USE_TLS', 'false'),
        'encrypted' => env('PUSHER_ENCRYPTED', 'true'),
        'host' => env('PUSHER_HOST', '127.0.0.1'),
        'port' => env('PUSHER_PORT', '6001'),
        'scheme' => env('PUSHER_SCHEMA', 'http'),
    ],
],

Để nhận và gửi gói tin qua cổng 6001

php artisan websockets:serve --port=6001

Theo mặc định, máy chủ Laravel WebSocket sẽ lắng nghe

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
2 và cho phép các kết nối đến từ tất cả các mạng. Nếu bạn muốn hạn chế chế độ này, bạn có thể khởi động máy chủ bằng một tùy chọn
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
3, sau đó là IP

Ví dụ. bằng cách sử dụng

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
4, bạn sẽ chỉ cho phép các WebSocket kết nối từ localhost

Để giữ tiến trình này, ta nên sử dụng người giám sát để đảm bảo nó luôn luôn chạy.

Sau khi cài đặt trình giám sát, vui lòng thêm một quy trình mới

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
5cần tiếp tục chạy. You set configuration of your own in directory
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
6(Debian/Ubuntu) or
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
7(Red Hat/CentOS).

Trong thư mục đó, hãy tạo một tệp mới có tên

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
8

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
5

Sau khi được tạo, hãy hướng dẫn

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
5tải lại các tệp cấu hình của nó (mà không ảnh hưởng đến các công việc đang chạy của
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
5)

thật sự rất hữu ích nếu bạn muốn xem các hoạt động tại thời gian thực của người dùng (hoặc có một số công việc xếp hàng)

Không nên sợ hãi từ “Websockets”. Tôi sẽ đưa ra một số hướng dẫn về cách sử dụng nó và sẽ giải đáp thắc mắc của bạn khi cần.

Ổ cắm io php ấu trùng
Ổ cắm io php ấu trùng

“Tại sao không sử dụng Pusher?”

Có một vấn đề, đó là trong Laravel đã có cả Pusher. Mặc dù Pusher là một giải pháp “Plug and Play” khá nhanh nhạy, bản thân nó cũng có khá nhiều giới hạn. Kiểm tra https. // người đẩy. com/pricing.

Và hầu hết các hướng dẫn đều lừa bạn bằng hình thu nhỏ “Ứng dụng Websockets” nhưng thật ra cũng chỉ lừa dối bạn Pusher mà thôi. (Và phần mà tôi thấy buồn cười nhất là khi họ nói rằng bạn có thể chuyển sang ổ cắm. io một cách dễ dàng)

“ We need to have a number of connection infinite. ”

Đúng vậy, chúng tôi hoàn toàn không muốn lắng nghe về giới hạn

Start start from use vagrant / homestead

Để có cái này bạn phải đọc về Phát sóng sự kiện.

Có những thứ cần lưu ý ở đây (để tôi không nhắc lại phía sau nữa)

  1. Giao diện ShouldBroadcast cho các sự kiện
  2. Kích hoạt các tuyến phát sóng và sử dụng các tuyến/kênh. php for the user verify
  3. Kênh công khai  — Ai cũng có thể nghe
  4. Kênh riêng  — Người dùng phải được kiểm duyệt nếu muốn tham gia vào nhóm
  5. Sự hiện diện  — Tương tự như Riêng tư nhưng bạn có thể xem khá nhiều siêu dữ liệu bên ngoài đó và có danh sách những người đã tham gia cùng kênh. phương thức sự kiện BroadcastOn()

Tạo sự kiện

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
8

Bạn có thể xem các ví dụ cụ thể trong tài liệu về Event Broadcasting

Cài đặt lại

Trước đó tôi đã thiết lập hàng đợi bằng Người giám sát/Redis/Horizon. Horizon là một công cụ tuyệt vời và bạn có thể xem thêm thông tin về nó tại đây https. // ấu trùng. com/docs/5. 6/đường chân trời

Sau khi hàng đợi đã hoạt động, sự kiện MessagePushed sẽ áp dụng cho chúng

Lưu ý . Nhớ sửa. env để đảm bảo mọi thứ hoạt động trơn tru nhé.

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
9

Cài đặt Laravel Echo Server

Đây là phần chúng ta cài đặt socket. io server được bundle trong laravel-echo-server. Xem thêm tại đây. https. //github. com/tlaverdure/laravel-echo-server

Lưu ý . Kiểm tra các yêu cầu trên đầu trước.

Chạy như bên dưới đây (như trong tài liệu)

php artisan migrate
0

Sau đó chạy init để tạo file laravel-echo-server. json vào trong ứng dụng gốc (cái này chúng ta sẽ phải cấu hình)

php artisan migrate
1

Sau khi đã tạo được file laravel-echo-server. json thì nó sẽ giống như sau

php artisan migrate
2

Lưu ý . Nếu bạn muốn đẩy phần này vào máy chủ công cộng, hãy đảm bảo có thêm laravel-echo-server. json vào . gitignore và tạo tập tin này trên máy chủ nhé, nếu không bạn phải đổi authHost liên tục.

Chạy máy chủ Laravel Echo

You must run this section to started websockets

php artisan migrate
3

(nằm trong root — cho phép đặt laravel-echo-server. json)

Sau đó nó sẽ khởi động thành công. (Sau đó chúng ta sẽ muốn thêm nó vào máy chủ để nó tự khởi động và khởi động lại nếu bị bể)

Để phần này trong /etc/supervisor/conf. d/laravel-echo. conf của bạn (tạo tệp này trong thư mục conf. d ).

php artisan migrate
4

Một khi bạn đã sắp xếp trong laravel root, bạn có thể chạy

php artisan migrate
5

to get the path of ‘directory’ at on and of the prefix ‘stdout_logfile’

Người dùng sẽ trở thành người dùng linux (vagrant hoặc ubuntu hoặc cái khác)

Save file and exit

(nếu bạn cần sử dụng vim laravel-echo. conf thì khi làm trong quá trình, hãy nhấn I (as Istanbul) trên bàn phím để chỉnh sửa tệp bằng VIM rồi nhập ESC như sau. wq. to close and save file

Sau đó chúng ta sẽ chạy các lệnh

php artisan migrate
6

Rồi kiểm tra xem laravel echo có đang chạy không

php artisan migrate
7

Cài đặt Laravel Echo và Socket IO client

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
90

Sau đó đăng ký Echo trong bootstrap. js (Bạn đang sử dụng Vue js)

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
91

Vui lòng kiểm tra lại một lần nữa cách nghe sự kiện của bạn trên một số kênh nhất định

Theo Laravel Broadcasting mà tôi đã đề cập trước đó, nếu bạn sử dụng phương thức broadcastOn() để trả về một PresenceChannel mới (Tôi sẽ giải thích kĩ hơn các casr tôi đã làm. Tôi thấy rằng phần này phức tạp hơn việc dùng public channel, vì thế chúng ta có thể giảm xuống không thành vấn đề) rồi chúng ta sẽ nghe lại channel trên diện Javascript (frontend).

Dưới đây là một số ví dụ điển hình

  1. Tôi đã đẩy một sự kiện vào kênh hiện diện (phần này đang làm với các cuộc khảo sát)
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
92
  1. Sau khi được đẩy, nó sẽ đi dọc các kênh. php và trong đó chúng ta sẽ tạo nên phần ủy quyền cho người dùng này (nhớ trả về mảng cho kênh hiện diện phần ủy quyền chứ không phải Boolean)
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
93

3. Trong thành phần VueJs của tôi có tải trên trang, tôi xác định một phương thức bắt nguồn từ phương thức đã tạo () đang tải

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
94

Tôi đã lấy một vài đoạn mã ra khỏi ví dụ nhưng vẫn còn mảng 'users_viewing' để người dùng vẫn tham gia vào các kênh được.