Table of Contents
What are WebSockets?
What is Laravel Echo?
Installing and Configuring Laravel Echo
Create WebSockets Server
Establishing real-time communication
Conclusion
Home PHP Framework Laravel Laravel development: How to implement WebSockets communication using Laravel Echo?

Laravel development: How to implement WebSockets communication using Laravel Echo?

Jun 13, 2023 pm 01:34 PM
laravel websockets echo

Laravel is a popular PHP framework that has many useful tools and extension libraries that allow developers to easily build high-quality web applications. Among them, Laravel Echo is a powerful WebSockets communication tool that can help developers achieve real-time communication in web applications.

In this article, we will introduce how to use Laravel Echo and establish a WebSockets server to achieve real-time communication. We will first briefly describe what WebSockets and Laravel Echo are, then we will explain how to install and configure Laravel Echo, and finally demonstrate how to use Laravel Echo to communicate with JavaScript clients.

What are WebSockets?

WebSockets is a protocol that allows real-time communication connections between web applications and web servers. This connection can remain open for a long time and is bidirectional, allowing simultaneous reading and writing.

Unlike HTTP requests, the continuous opening of the WebSockets connection allows the server to push data to the client in real time without the need for polling or long polling. This enables web applications to communicate quickly, efficiently, and in real time.

What is Laravel Echo?

Laravel Echo is an official extension library of the Laravel framework, which can help developers implement WebSockets communication in web applications. It provides a simple API to easily subscribe to broadcast channels and pass messages between client and server using JavaScript.

Use Laravel Echo and Laravel Pusher to easily set up a WebSockets server and use broadcast channels to organize WebSockets communication. On the client side, we can use JavaScript and Laravel Echo to listen for messages in real time to enable real-time communication in web applications.

Installing and Configuring Laravel Echo

Before starting to use Laravel Echo, we need to install and configure the required software: Laravel and pusher PHP SDK. Laravel Echo and pusher PHP SDK can be installed through the Composer package manager.

First we need to install Laravel:

1

composer create-project laravel/laravel your-project-name

Copy after login

Next, we need to install pusher PHP SDK. The installation of pusher PHP SDK can be completed by running the following command:

1

composer require pusher/pusher-php-server

Copy after login

In order to integrate Laravel Echo and pusher PHP SDK, we need to add the service provider and alias in the config/app.php file:

1

2

3

4

5

6

7

8

9

10

11

// config/app.php

 

'providers' => [

    // ...

    LaravelBroadcastingBroadcastServiceProvider::class,

],

 

'aliases' => [

    // ...

    'Broadcast' => LaravelBroadcastingBroadcastFacade::class,

],

Copy after login

Next, let's do some configuration work to ensure that Laravel Echo and pusher PHP SDK can work properly. We need to add all the configuration required by Laravel Echo and pusher PHP SDK in the .env file:

1

2

3

4

5

BROADCAST_DRIVER=pusher

PUSHER_APP_ID=your-pusher-app-id

PUSHER_APP_KEY=your-pusher-app-key

PUSHER_APP_SECRET=your-pusher-app-secret

PUSHER_APP_CLUSTER=your-pusher-app-cluster

Copy after login

Create WebSockets Server

Next, we will set up using Laravel Echo and pusher PHP SDK WebSockets server. We need to define the broadcast channel in the routes/channels.php file. The broadcast channel determines which users can receive broadcast messages.

1

2

3

4

5

6

7

// routes/channels.php

 

use IlluminateSupportFacadesBroadcast;

 

Broadcast::channel('chat.{roomId}', function ($user, $roomId) {

    // ...

});

Copy after login

In the above example, we defined a broadcast channel named "chat" and passed it a parameter "roomId". Only users with the "chat.roomId" permission can receive messages from this broadcast channel.

Next, we need to define the broadcast event and push its message. Create a new event class in the app/Events directory, for example:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

// app/Events/ChatMessageSent.php

 

<?php

 

namespace AppEvents;

 

use IlluminateBroadcastingPrivateChannel;

use IlluminateContractsBroadcastingShouldBroadcast;

use IlluminateFoundationEventsDispatchable;

use IlluminateQueueSerializesModels;

 

class ChatMessageSent implements ShouldBroadcast

{

    use Dispatchable, SerializesModels;

 

    public $message;

 

    public function __construct($message)

    {

        $this->message = $message;

    }

 

    public function broadcastOn()

    {

        return new PrivateChannel('chat.' . $this->message['room_id']);

    }

}

Copy after login

This event class contains the logic of broadcast events, and needs to implement the ShouldBroadcast interface to be broadcast.

Now we can instantiate the event in our application and then send the broadcast message. For example, add the following message sending method in the app/Http/Controllers/ChatController.php file:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// app/Http/Controllers/ChatController.php

 

<?php

 

namespace AppHttpControllers;

 

use AppEventsChatMessageSent;

use IlluminateHttpRequest;

 

class ChatController extends Controller

{

    public function sendMessage(Request $request)

    {

        $message = [

            'user_id' => $request->user()->id,

            'room_id' => $request->get('room_id'),

            'message' => $request->get('message'),

        ];

 

        event(new ChatMessageSent($message));

 

        return response()->json(['status' => 'Message Sent!']);

    }

}

Copy after login

Please note that in the above code, event(new ChatMessageSent($message)) triggers the event and sends A broadcast event containing message data.

Establishing real-time communication

Finally, we need to use Laravel Echo in the JavaScript client to listen for broadcast events to obtain real-time WebSockets communication. In JavaScript, we can use two ways to listen to broadcast events:

  • Echo.channel(channelName).listen(eventName, callback): Subscribe to broadcast events and register a callback function to receive Executed when the event occurs.
  • Echo.private(channelName).listen(eventName, callback): Subscribe to private broadcast events and register a callback function to execute when the event is received.

For example, in our chat application, we can use the following code to listen for events for new messages:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// resources/js/app.js

 

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

 

window.Echo = new Echo({

    broadcaster: 'pusher',

    key: process.env.MIX_PUSHER_APP_KEY,

    cluster: process.env.MIX_PUSHER_APP_CLUSTER,

    encrypted: true,

});

 

window.Echo.channel(`chat.${roomId}`)

    .listen('ChatMessageSent', (e) => {

        console.log(e);

    });

Copy after login

In the above code, we use the Laravel Echo client to subscribe "chat.roomId" channel and print out the event data when the "ChatMessageSent" event is received.

Conclusion

By using Laravel Echo and pusher PHP SDK, we can easily set up a WebSockets server and use broadcast channels to implement WebSockets communication. On the client side, we can use JavaScript and Laravel Echo to monitor messages in real time to achieve real-time communication.

Additionally, Laravel Echo provides many other broadcast channels and events available, which we can use to build complex web applications. If you are looking for a modern real-time communication solution, Laravel Echo and pusher PHP SDK are a good choice.

The above is the detailed content of Laravel development: How to implement WebSockets communication using Laravel Echo?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP vs. Flutter: The best choice for mobile development PHP vs. Flutter: The best choice for mobile development May 06, 2024 pm 10:45 PM

PHP vs. Flutter: The best choice for mobile development

Laravel - Artisan Commands Laravel - Artisan Commands Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands

How to use object-relational mapping (ORM) in PHP to simplify database operations? How to use object-relational mapping (ORM) in PHP to simplify database operations? May 07, 2024 am 08:39 AM

How to use object-relational mapping (ORM) in PHP to simplify database operations?

Analysis of the advantages and disadvantages of PHP unit testing tools Analysis of the advantages and disadvantages of PHP unit testing tools May 06, 2024 pm 10:51 PM

Analysis of the advantages and disadvantages of PHP unit testing tools

PHP distributed system architecture and practice PHP distributed system architecture and practice May 04, 2024 am 10:33 AM

PHP distributed system architecture and practice

Comparison of the latest versions of Laravel and CodeIgniter Comparison of the latest versions of Laravel and CodeIgniter Jun 05, 2024 pm 05:29 PM

Comparison of the latest versions of Laravel and CodeIgniter

How do the data processing capabilities in Laravel and CodeIgniter compare? How do the data processing capabilities in Laravel and CodeIgniter compare? Jun 01, 2024 pm 01:34 PM

How do the data processing capabilities in Laravel and CodeIgniter compare?

PHP code unit testing and integration testing PHP code unit testing and integration testing May 07, 2024 am 08:00 AM

PHP code unit testing and integration testing

See all articles