laravel pusher服务

官方文档提供了pusher服务的替代品:soketi,据说性能杠杠的,使用方法如下:

apt-get install -y git python3 gcc build-essential

安装soketi&启动

npm install -g pm2

npm install -g @soketi/soketi
pm2 start soketi -- start --config=/etc/my_soketi/config.json  // 指定配置文件启动soketi服务

#### config.json如下
{
  "debug": true,
  "port": 6001,
  "appManager.array.apps": [
    {
      "id": "your-new-id",
      "key": "your-new-key",
      "secret": "your-new-secret"
    }
  ]
}



  

安装PHP pusher包,理论上只要支持composer的PHP项目都可以使用pusher服务

composer require pusher/pusher-php-server

  

客户端(前端)

npm install --save-dev laravel-echo pusher-js

  

设置laravel项目 Soketi配置

###### config/broadcasting.php
'connections' => [ // ... 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY', 'app-key'), 'secret' => env('PUSHER_APP_SECRET', 'app-secret'), 'app_id' => env('PUSHER_APP_ID', 'app-id'), 'options' => [ 'host' => env('PUSHER_HOST', '127.0.0.1'), 'port' => env('PUSHER_PORT', 6001), 'scheme' => env('PUSHER_SCHEME', 'http'), 'encrypted' => true, 'useTLS' => env('PUSHER_SCHEME') === 'https', ], ], ],


######## .env
PUSHER_APP_KEY=key
PUSHER_APP_ID=id
PUSHER_APP_SECRET=secret
PUSHER_HOST="sub.app.co"
PUSHER_PORT=443
PUSHER_SCHEME=https

VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"

  

js 代码

import Echo from "laravel-echo";

import Pusher from "pusher-js";
window.Pusher = Pusher;
window.Echo = new Echo({
    broadcaster: "pusher",
    key: import.meta.env.VITE_PUSHER_APP_KEY,
    forceTLS: false,
    encrypted: import.meta.env.VITE_PUSHER_ENCRYPTED === "true",
    wsHost: import.meta.env.VITE_PUSHER_HOST,
    wsPort: import.meta.env.VITE_PUSHER_PORT,
    wssPort: import.meta.env.VITE_PUSHER_PORT,
    disableStats: true,
    enabledTransports: ["ws", "wss"],
});


window.Echo.channel("orders").listen("OrderStatusUpdated", (e) => {
    console.log(e);
});

  

服务端代码 PHP代码

class OrderStatusUpdated implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct()
    {
    }

    public function broadcastOn()
    {
        return new Channel('orders');
    }
}

  

服务端go代码

go get github.com/pusher/pusher-http-go/v5

  

package main

import (
  "github.com/pusher/pusher-http-go/v5"
)

func main(){
    // instantiate a client
    pusherClient := pusher.Client{
        AppID:   "APP_ID",
        Key:     "APP_KEY",
        Secret:  "APP_SECRET",
        Cluster: "APP_CLUSTER",
    }
   pusherClient.Host = "127.0.0.1:6001" data := map[string]string{"message": "hello world"} // trigger an event on a channel, along with a data payload err := pusherClient.Trigger("my-channel", "my_event", data) // All trigger methods return an error object, it's worth at least logging this! if err != nil { panic(err) } }

  

posted @ 2022-11-16 14:44  花泪哲  阅读(333)  评论(0)    收藏  举报