{"id":34134,"date":"2022-10-31T10:35:06","date_gmt":"2022-11-16T03:45:58","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/"},"modified":"2024-04-28T22:17:36","modified_gmt":"2024-04-28T14:17:36","slug":"%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1"},"content":{"rendered":"<p>\u524d\u6bb5\u65f6\u95f4\uff0c\u6211\u5728\u4e1a\u52a1\u4e2d\u4f7f\u7528\u4e86Laravel Echo\uff0c\u5c06\u672a\u8bfb\u901a\u77e5\u7684\u529f\u80fd\u5b9e\u73b0\u5728Flutter\u5e94\u7528\u4e2d\u3002<\/p>\n<p>\u6211\u60f3\u8981\u4e00\u5e76\u53d1\u5e03\u4e00\u4e2a\u5907\u5fd8\u5f55\u3002<\/p>\n<h1>\u7248\u672c<\/h1>\n<pre class=\"post-pre\"><code>$ php artisan --version\r\nLaravel Framework 7.30.6\r\n\r\n$ flutter --version\r\nFlutter 3.0.4 \u2022 channel stable \u2022 https:\/\/github.com\/flutter\/flutter.git\r\nFramework \u2022 revision 85684f9300 (3 weeks ago) \u2022 2022-06-30 13:22:47 -0700\r\nEngine \u2022 revision 6ba2af10bb\r\nTools \u2022 Dart 2.17.5 \u2022 DevTools 2.12.2\r\n<\/code><\/pre>\n<h1>Laravel\u7684\u914d\u7f6e<\/h1>\n<p>\u9996\u5148\u8ba9\u6211\u4eec\u5728Laravel\u7aef\u8fdb\u884cLaravel Echo\u7684\u8bbe\u7f6e\u3002<br \/>\n\u8fd9\u6b21\u6211\u4eec\u60f3\u8981\u4f7f\u7528laravel-echo-server\u6765\u5b9e\u73b0\uff0c\u800c\u4e0d\u662f\u4f7f\u7528Pusher\u3002<\/p>\n<h2>\u5b89\u88c5Redis<\/h2>\n<p>\u9996\u5148\u8981\u5b89\u88c5Redis\u3002\u7531\u4e8e\u6211\u4f7f\u7528\u7684\u662fMac\u64cd\u4f5c\u7cfb\u7edf\uff0c\u6240\u4ee5\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002<br \/>\n\u5982\u679c\u672c\u5730\u5df2\u7ecf\u5b89\u88c5\u4e86Redis\uff0c\u5219\u5f53\u7136\u4e0d\u9700\u8981\u518d\u6b21\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code>\/\/ \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n$ brew install redis\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u5728redis-server\u4e0a\u542f\u52a8Redis\u670d\u52a1\u3002\u5c1d\u8bd5\u542f\u52a8\u4e00\u6b21\u3002<\/p>\n<pre class=\"post-pre\"><code>$ redis-server\r\n42978:C 24 Jul 2022 16:23:49.242 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo\r\n42978:C 24 Jul 2022 16:23:49.242 # Redis version=7.0.3, bits=64, commit=00000000, modified=0, pid=42978, just started\r\n42978:C 24 Jul 2022 16:23:49.242 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server \/path\/to\/redis.conf\r\n42978:M 24 Jul 2022 16:23:49.243 * Increased maximum number of open files to 10032 (it was originally set to 2560).\r\n42978:M 24 Jul 2022 16:23:49.243 * monotonic clock: POSIX clock_gettime\r\n                _._                                                  \r\n           _.-``__ ''-._                                             \r\n      _.-``    `.  `_.  ''-._           Redis 7.0.3 (00000000\/0) 64 bit\r\n  .-`` .-```.  ```\\\/    _.,_ ''-._                                  \r\n (    '      ,       .-`  | `,    )     Running in standalone mode\r\n |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379\r\n |    `-._   `._    \/     _.-'    |     PID: 42978\r\n  `-._    `-._  `-.\/  _.-'    _.-'                                   \r\n |`-._`-._    `-.__.-'    _.-'_.-'|                                  \r\n |    `-._`-._        _.-'_.-'    |           https:\/\/redis.io       \r\n  `-._    `-._`-.__.-'_.-'    _.-'                                   \r\n |`-._`-._    `-.__.-'    _.-'_.-'|                                  \r\n |    `-._`-._        _.-'_.-'    |                                  \r\n  `-._    `-._`-.__.-'_.-'    _.-'                                   \r\n      `-._    `-.__.-'    _.-'                                       \r\n          `-._        _.-'                                           \r\n              `-.__.-'                                               \r\n\r\n42978:M 24 Jul 2022 16:23:49.244 # WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128.\r\n42978:M 24 Jul 2022 16:23:49.244 # Server initialized\r\n42978:M 24 Jul 2022 16:23:49.244 * Ready to accept connections\r\n\r\n<\/code><\/pre>\n<p>\u8bf7\u8bb0\u4f4f\u5728\u6b64\u5904\u663e\u793a\u7684\u7aef\u53e3\u53f7\uff08\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\u4e3a6379\uff09\uff0c\u7a0d\u540e\u5c06\u7528\u4e8e\u914d\u7f6e\u3002<\/p>\n<h2>Laravel Echo \u7684\u5b89\u88c5<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u8bf7\u8f6c\u5230\u9879\u76ee\u6839\u76ee\u5f55\u5e76\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u5b89\u88c5 Laravel Echo \u7b49\u5de5\u5177\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/ laravel Echo\u306b\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n$ composer require predis\/predis\r\n$ npm install --save laravel-echo socket.io-client\r\n\r\n\/\/ laravel-echo-server\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n$ npm install -g laravel-echo-server\r\n\r\n\/\/ laravel echo\u306e\u521d\u671f\u8a2d\u5b9a\u3092\u884c\u3044laravel-echo-server.json\u3092\u4f5c\u6210\u3059\u308b\r\n$ laravel-echo-server init\r\n\r\n\/\/ \u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306e\u6642\u306e\u3082\u306e\u3067\u3059\u3002\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\r\n? Do you want to run this server in development mode? Yes\r\n? Which port would you like to serve from? 6001\r\natomu@okunoMacBook-Pro mygolf % laravel-echo-server init\r\n? Do you want to run this server in development mode? Yes\r\n? Which port would you like to serve from? 6001\r\n? Which database would you like to use to store presence channel members? redis\r\n? Enter the host of your Laravel authentication server. http:\/\/localhost\r\n? Will you be serving on http or https? http\r\n? Do you want to generate a client ID\/Key for HTTP API? Yes\r\n? Do you want to setup cross domain access to the API? Yes\r\n? Specify the URI that may access the API: http:\/\/localhost:8000\r\n? Enter the HTTP methods that are allowed for CORS: GET, POST\r\n? Enter the HTTP headers that are allowed for CORS: Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id\r\n? What do you want this config to be saved as? laravel-echo-server.json\r\nappId: f526a01938a20971\r\nkey: 7e9ec298b4b10e8dccc0e5c930bb8c94\r\nConfiguration file saved. Run laravel-echo-server start to run server.\r\n<\/code><\/pre>\n<p>\u5f53\u67e5\u770b\u521b\u5efa\u7684laravel-echo-server.json\u65f6\uff0c\u6211\u8ba4\u4e3a\u5176\u4e2d\u7684&#8221;redis&#8221;\u90e8\u5206\u662f{}\u3002<br \/>\n\u6211\u5c06\u5bf9\u6b64\u90e8\u5206\u8fdb\u884c\u4ee5\u4e0b\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n\t<span class=\"nl\">\"databaseConfig\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"err\">\/\/<\/span> <span class=\"err\">\u3053\u306e\u90e8\u5206\u3092\u8a18\u5165\u3059\u308b<\/span>\r\n\t\t<span class=\"nl\">\"redis\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n\t\t\t<span class=\"nl\">\"scheme\"<\/span> <span class=\"p\">:<\/span> <span class=\"s2\">\"tls\"<\/span><span class=\"p\">,<\/span>\r\n\t\t\t<span class=\"nl\">\"host\"<\/span> <span class=\"p\">:<\/span> <span class=\"s2\">\"localhost\"<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"err\">\/\/<\/span> <span class=\"err\">redis\u3092\u8d77\u52d5\u3057\u305f\u6642\u306b\u8868\u793a\u3055\u308c\u305f\u30dd\u30fc\u30c8<\/span>\r\n\t\t\t<span class=\"nl\">\"port\"<\/span> <span class=\"p\">:<\/span> <span class=\"s2\">\"6379\"<\/span>\r\n            <span class=\"err\">\/\/<\/span> <span class=\"err\">config\/database.php\u306eredis.options.prefix\u306e\u5024<\/span>\r\n            <span class=\"nl\">\"keyPrefix\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"laravel_database_\"<\/span>\r\n\t\t<span class=\"p\">},<\/span>\r\n\t<span class=\"p\">},<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u6ce8\u610f\u7684\u662fkeyPrefix\u7684\u90e8\u5206\u3002<br \/>\n\u8bf7\u5c06\u8be5\u90e8\u5206\u8bbe\u7f6e\u4e3aconfig\/database.php\u4e2dredis.options.prefix\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Support\\Str<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">return<\/span> <span class=\"p\">[<\/span>\r\n\r\n<span class=\"err\">\u3000<\/span>   <span class=\"err\">\u3000\u3000\u30fb\u30fb\u30fb<\/span>\r\n\r\n    <span class=\"s1\">'redis'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">[<\/span>\r\n        <span class=\"s1\">'client'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">env<\/span><span class=\"p\">(<\/span><span class=\"s1\">'REDIS_CLIENT'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'phpredis'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"s1\">'options'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"s1\">'cluster'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">env<\/span><span class=\"p\">(<\/span><span class=\"s1\">'REDIS_CLUSTER'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'redis'<\/span><span class=\"p\">),<\/span>\r\n            <span class=\"c1\">\/\/ \u3053\u3053\u306b\u5165\u308b<\/span>\r\n            <span class=\"s1\">'prefix'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">env<\/span><span class=\"p\">(<\/span><span class=\"s1\">'REDIS_PREFIX'<\/span><span class=\"p\">,<\/span> <span class=\"nc\">Str<\/span><span class=\"o\">::<\/span><span class=\"nf\">slug<\/span><span class=\"p\">(<\/span><span class=\"nf\">env<\/span><span class=\"p\">(<\/span><span class=\"s1\">'APP_NAME'<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'laravel'<\/span><span class=\"p\">),<\/span> <span class=\"s1\">'_'<\/span><span class=\"p\">)<\/span><span class=\"mf\">.<\/span><span class=\"s1\">'_database_'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">],<\/span>\r\n\r\n<span class=\"err\">\u3000\u3000\u3000<\/span>   <span class=\"err\">\u30fb\u30fb\u30fb<\/span>\r\n\r\n<span class=\"p\">];<\/span>\r\n<\/code><\/pre>\n<p>\u8fd9\u53ef\u80fd\u6709\u70b9\u590d\u6742\uff0c\u4f46\u8fd9\u5c31\u662f\u5b8c\u6210\u7684\u7248\u672c\u3002<br \/>\n\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u5728\u8fd9\u91cc\u521b\u5efa\u7684laravel-echo-server.json\u6587\u4ef6\u56e0\u4e3a\u6bcf\u4e2a\u73af\u5883\u4e0d\u540c\uff0c\u5efa\u8bae\u5c06\u5176\u6dfb\u52a0\u5230.gitignore\u4e2d\u3002<\/p>\n<h2>Laravel\u7684\u8bbe\u7f6e<\/h2>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u8fdb\u884cLaravel\u6846\u67b6\u7684\u8bbe\u7f6e\u3002<\/p>\n<p>\u9996\u5148\uff0c\u4f60\u9700\u8981\u53d6\u6d88\u6ce8\u91caconfig\/app.php\u4e2d\u7684App\\Providers\\BroadcastServiceProvider::class\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cm\">\/*\r\n* Application Service Providers...\r\n*\/<\/span>\r\n<span class=\"nc\">App\\Providers\\AppServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"nc\">App\\Providers\\AuthServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"c1\">\/\/ \u3053\u3053\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u5916\u3059<\/span>\r\n<span class=\"nc\">App\\Providers\\BroadcastServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"nc\">App\\Providers\\EventServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"nc\">App\\Providers\\RouteServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"nc\">SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<span class=\"nc\">App\\Providers\\ViewComposerServiceProvider<\/span><span class=\"o\">::<\/span><span class=\"n\">class<\/span><span class=\"p\">,<\/span>\r\n<\/code><\/pre>\n<p>\u7136\u540e\u7f16\u8f91.env\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>\/\/ \u4e21\u65b9\u3068\u3082\u65e2\u306b\u3042\u308b\u5834\u5408\u306fredis\u306b\u5909\u66f4\u3001\u305d\u3082\u305d\u3082\u8a18\u8f09\u306a\u3044\u5834\u5408\u306f\u8ffd\u8a18\r\nBROADCAST_DRIVER=redis\r\nQUEUE_CONNECTION=redis\r\nREDIS_CLIENT=predis\r\n<\/code><\/pre>\n<p>\u8bf7\u786e\u4fdd\u8bb0\u5f97\u53ca\u65f6\u66f4\u65b0\u7f13\u5b58\u54e6\u3002<\/p>\n<pre class=\"post-pre\"><code>$ php artisan config:cache\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u901a\u77e5\u6d3b\u52a8<\/h2>\n<p>\u5f53\u4f60\u8fbe\u5230\u8fd9\u4e00\u6b65\uff0c\u63a5\u4e0b\u6765\u8981\u521b\u5efa\u4e00\u4e2a\u80fd\u591f\u901a\u77e5Flutter\u5e94\u7528\u7a0b\u5e8f\u7684\u4e8b\u4ef6\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528php artisan make:event\u547d\u4ee4\u4ee5\u4e8b\u4ef6\u7684\u7c7b\u540d\u6765\u521b\u5efa\u4e8b\u4ef6\uff0c\u8bf7\u968f\u610f\u9009\u62e9\u4e00\u4e2a\u540d\u79f0\u8fdb\u884c\u521b\u5efa\u3002<\/p>\n<p>\u7531\u4e8e\u6211\u60f3\u53d1\u9001\u5173\u4e8e\u901a\u77e5\u7684\u516c\u544a\uff0c\u6211\u9009\u62e9\u4e86NewInformationEvent\u3002<\/p>\n<pre class=\"post-pre\"><code>$ php artisan make:event NewInformationEvent\r\nEvent created successfully.\r\n<\/code><\/pre>\n<p>\u901a\u77e5\u3059\u308b\u30c1\u30e3\u30f3\u30cd\u30eb\u540d\u3068\u9001\u4fe1\u3059\u308b\u5024\u3092\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u306f<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30c1\u30e3\u30f3\u30cd\u30eb\u540d\uff1atest-channel<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u9001\u4fe1\u3059\u308b\u5024\uff1amessage<\/ul>\n<p>\u6211\u5011\u5c07\u6309\u7167\u9019\u6a23\u7684\u8a2d\u7f6e\u65b9\u5f0f\u9032\u884c\u8a2d\u5b9a\u3002<\/p>\n<p>\u5728\u7c7b\u540d\u4e4b\u540e\uff0c\u518d\u6dfb\u52a0 implements ShouldBroadcast\u3002<\/p>\n<p>\u5b8c\u6210\u5f62\u5c06\u5448\u73b0\u5982\u4e0b\u5f62\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?php<\/span>\r\n\r\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Events<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Broadcasting\\Channel<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Broadcasting\\InteractsWithSockets<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Broadcasting\\PresenceChannel<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Broadcasting\\PrivateChannel<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Foundation\\Events\\Dispatchable<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">use<\/span> <span class=\"nc\">Illuminate\\Queue\\SerializesModels<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\">\/\/ implements\u4ee5\u964d\u3092\u8ffd\u52a0<\/span>\r\n<span class=\"kd\">class<\/span> <span class=\"nc\">NewInformationEvent<\/span> <span class=\"kd\">implements<\/span> <span class=\"nc\">ShouldBroadcast<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kn\">use<\/span> <span class=\"nc\">Dispatchable<\/span><span class=\"p\">,<\/span> <span class=\"nc\">InteractsWithSockets<\/span><span class=\"p\">,<\/span> <span class=\"nc\">SerializesModels<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * Create a new event instance.\r\n     *\r\n     * @return void\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"c1\">\/\/<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n    <span class=\"cd\">\/**\r\n     * Get the channels the event should broadcast on.\r\n     *\r\n     * @return \\Illuminate\\Broadcasting\\Channel|array\r\n     *\/<\/span>\r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">broadcastOn<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"c1\">\/\/ \u30c1\u30e3\u30f3\u30cd\u30eb\u540d<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Channel<\/span><span class=\"p\">(<\/span><span class=\"s1\">'test-channel'<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n \r\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">broadcastWith<\/span><span class=\"p\">()<\/span>\r\n    <span class=\"p\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"c1\">\/\/ \u9001\u4fe1\u3059\u308b\u5024<\/span>\r\n            <span class=\"s1\">'message'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'\u30c6\u30b9\u30c8\u3067\u3059\uff01'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"p\">];<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u73b0\u5728Laravel\u7684\u8bbe\u7f6e\u5df2\u7ecf\u5b8c\u6210\u4e86\uff01<\/p>\n<h1>Flutter\u7684\u914d\u7f6e<\/h1>\n<p>\u8ba9\u6211\u4eec\u63a5\u4e0b\u6765\u8fdb\u884cFlutter\u7684\u8bbe\u7f6e\u3002<br \/>\n\u5728Flutter\u4e2d\uff0c\u8981\u76d1\u542c\u4eceLaravel\u53d1\u9001\u7684\u5e7f\u64ad\uff0c\u9700\u8981\u4f7f\u7528\u4ee5\u4e0b\u5305\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u5f15\u5165\u8f6f\u4ef6\u5305<\/h2>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5f15\u5165\u8f6f\u4ef6\u5305\u3002<\/p>\n<pre class=\"post-pre\"><code>$ flutter pub add socket_io_client\r\n$ flutter pub add laravel_echo\r\n$ flutter pub get\r\n<\/code><\/pre>\n<h2>\u63a5\u6536\u901a\u77e5\u7684\u8bbe\u7f6e<\/h2>\n<p>\u6211\u4f1a\u5728main.dart\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u8bb0\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">import<\/span> <span class=\"s\">'package:laravel_echo\/laravel_echo.dart'<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"s\">'package:socket_io_client\/socket_io_client.dart'<\/span> <span class=\"k\">as<\/span> <span class=\"n\">IO<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"err\">\u30fb\u30fb\u30fb<\/span>\r\n\r\n  <span class=\"c1\">\/\/ \u8ffd\u8a18<\/span>\r\n  <span class=\"n\">Echo<\/span> <span class=\"n\">echo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Echo<\/span><span class=\"p\">({<\/span>\r\n    <span class=\"s\">'broadcaster'<\/span><span class=\"o\">:<\/span> <span class=\"s\">'socket.io'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"c1\">\/\/ laravel-echo-server init\u3067\u8a2d\u5b9a\u3057\u305f\u30db\u30b9\u30c8\uff1a\u30dd\u30fc\u30c8<\/span>\r\n    <span class=\"s\">'client'<\/span><span class=\"o\">:<\/span> <span class=\"n\">IO<\/span><span class=\"o\">.<\/span><span class=\"na\">io<\/span><span class=\"p\">(<\/span><span class=\"s\">'http:\/\/localhost:6001'<\/span><span class=\"p\">),<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"c1\">\/\/ php artisan make:event \u30a4\u30d9\u30f3\u30c8\u306e\u30af\u30e9\u30b9\u540d\u3067\u4f5c\u6210\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u540d\u3068\u30c1\u30e3\u30f3\u30cd\u30eb\u540d<\/span>\r\n  <span class=\"n\">echo<\/span><span class=\"o\">.<\/span><span class=\"na\">channel<\/span><span class=\"p\">(<\/span><span class=\"s\">'test-channel'<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"na\">listen<\/span><span class=\"p\">(<\/span><span class=\"s\">'NewInformationEvent'<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">);<\/span>\r\n  <span class=\"p\">});<\/span>\r\n\r\n  <span class=\"err\">\u30fb\u30fb\u30fb<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6309\u7167\u516c\u5f0f\u6587\u4ef6\u7684\u8981\u6c42\uff0c\u662f\u8fd9\u6837\u7ed3\u675f\u7684\uff01<\/p>\n<h1>\u6d4b\u8bd5<\/h1>\n<p>\u90a3\u6211\u4eec\u9a6c\u4e0a\u8fdb\u884c\u6d4b\u8bd5\u5427\u3002\u6211\u672c\u6765\u4ee5\u4e3a\u53ea\u9700\u8981\u8fd0\u884cflutter run\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u9057\u61be\u7684\u662f\uff0c\u636e\u8bf4Laravel Echo\u5305\u8fd8\u4e0d\u652f\u6301Null Safety\u3002<\/p>\n<p>\u6211\u5728\u67e5\u770b\u516c\u5f0f\u65f6\u53d1\u73b0\uff0c\u53ea\u6709\u6d4b\u8bd5\u7248\u652f\u6301Null Safety\uff0c\u6240\u4ee5\u6211\u53ea\u80fd\u5b89\u88c5\u4e86\u6d4b\u8bd5\u7248\u3002<br \/>\n\u53e6\u5916\uff0c\u6211\u5b89\u88c5\u4e86\u4e0d\u540c\u7684\u7248\u672c\uff0c\u56e0\u4e3a\u5982\u679c\u5b89\u88c5\u6700\u65b0\u7248\u672c\u7684socket_io_client\u7684\u8bdd\uff0c\u5b83\u65e0\u6cd5\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">dependencies<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"s\">\/\/ \u5909\u66f4<\/span>\r\n  <span class=\"s\">laravel_echo<\/span><span class=\"err\">:<\/span> <span class=\"s\">^1.0.0-beta.1<\/span>\r\n  <span class=\"s\">\/\/ \u5909\u66f4<\/span>\r\n  <span class=\"s\">socket_io_client<\/span><span class=\"err\">:<\/span> <span class=\"s\">^1.0.1<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ flutter pub get\r\n<\/code><\/pre>\n<p>\u968f\u4e4b\u800c\u6765\uff0cmain.dart\u4e5f\u4f1a\u8fdb\u884c\u4e00\u4e9b\u5fae\u8c03\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\r\n\r\n  <span class=\"err\">\u30fb\u30fb\u30fb<\/span>\r\n\r\n  <span class=\"n\">IO<\/span><span class=\"o\">.<\/span><span class=\"na\">Socket<\/span> <span class=\"n\">socket<\/span> <span class=\"o\">=<\/span> <span class=\"n\">IO<\/span><span class=\"o\">.<\/span><span class=\"na\">io<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"s\">'http:\/\/localhost:6001'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">IO<\/span><span class=\"o\">.<\/span><span class=\"na\">OptionBuilder<\/span><span class=\"p\">()<\/span>\r\n        <span class=\"o\">.<\/span><span class=\"na\">disableAutoConnect<\/span><span class=\"p\">()<\/span>\r\n        <span class=\"o\">.<\/span><span class=\"na\">setTransports<\/span><span class=\"p\">([<\/span><span class=\"s\">'websocket'<\/span><span class=\"p\">])<\/span><span class=\"o\">.<\/span><span class=\"na\">build<\/span><span class=\"p\">(),<\/span>\r\n  <span class=\"p\">);<\/span>\r\n\r\n  <span class=\"n\">Echo<\/span> <span class=\"n\">echo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Echo<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"nl\">broadcaster:<\/span> <span class=\"n\">EchoBroadcasterType<\/span><span class=\"o\">.<\/span><span class=\"na\">SocketIO<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nl\">client:<\/span> <span class=\"n\">socket<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"p\">);<\/span>\r\n\r\n  <span class=\"err\">\u30fb\u30fb\u30fb<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u518d\u6b21\u6267\u884cflutter run<\/p>\n<pre class=\"post-pre\"><code>$ flutter run\r\nLaunching lib\/main.dart on iPhone 13 in debug mode...\r\nRunning Xcode build...                                                  \r\n \u2514\u2500Compiling, linking and signing...                        10.0s\r\nXcode build done.                                           43.7s      \r\n<\/code><\/pre>\n<p>\u597d\u7684\uff01\uff01<\/p>\n<h2>\u5c1d\u8bd5\u901a\u8fc7Laravel\u53d1\u9001\u901a\u77e5<\/h2>\n<p>\u65e2\u7136\u6210\u529f\u6784\u5efa\u4e86\uff0c\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4eceLaravel\u53d1\u9001\u901a\u77e5\u3002<\/p>\n<p>\u9996\u5148\uff0c\u5728Laravel\u7aef\u542f\u52a8Redis\u3001Laravel Echo Server\u548c\u961f\u5217\u3002<\/p>\n<h5>redis\u306e\u8d77\u52d5<\/h5>\n<pre class=\"post-pre\"><code>$ redis-server\r\n<\/code><\/pre>\n<h5>\u542f\u52a8Laravel Echo Server<\/h5>\n<pre class=\"post-pre\"><code>$ laravel-echo-server start\r\n\r\nL A R A V E L  E C H O  S E R V E R\r\n\r\nversion 1.6.3\r\n\r\n\u26a0 Starting server in DEV mode...\r\n\r\n\u2714  Running at localhost on port 6001\r\n\u2714  Channels are ready.\r\n\u2714  Listening for http events...\r\n\u2714  Listening for redis events...\r\n\r\nServer ready!\r\n<\/code><\/pre>\n<h5>\u542f\u52a8\u961f\u5217\u5de5\u4f5c\u8005<\/h5>\n<pre class=\"post-pre\"><code>$ php artisan queue:work \r\n<\/code><\/pre>\n<p>\u53ea\u8981\u6ca1\u6709\u53d1\u751f\u9519\u8bef\uff0c\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<p>\u53ef\u4ee5\u4f7f\u7528event(new PublicEvent())\u5728\u60f3\u8981\u901a\u77e5\u7684\u5730\u65b9\u901a\u8fc7Laravel\u8fdb\u884c\u901a\u77e5\u3002<\/p>\n<p>\u7531\u4e8e\u8fd9\u6b21\u662f\u8003\u8bd5\uff0c\u6211\u60f3\u8bd5\u8bd5\u4eceTinker\u901a\u77e5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ php artisan tinker\r\nPsy Shell v0.11.5 (PHP 7.4.24 \u2014 cli) by Justin Hileman\r\n&gt;&gt;&gt; use App\\Events\\NewInformationEvent;\r\n&gt;&gt;&gt; event(new NewInformationEvent());\r\n=&gt; []\r\n<\/code><\/pre>\n<p>Flutter\u7684\u63a7\u5236\u53f0<\/p>\n<pre class=\"post-pre\"><code>flutter: {message: \u30c6\u30b9\u30c8\u3067\u3059\uff01, socket: null}\r\n<\/code><\/pre>\n<p>\u5b8c\u6210\u4e86\uff01<\/p>\n<h1>\u6700\u540e<\/h1>\n<p>\u7b2c\u4e00\u6b21\u5c1d\u8bd5\u4f7f\u7528Laravel-echo-server\u771f\u7684\u5f88\u9ebb\u70e6\u5462&#8230;<br \/>\n\u6211\u89c9\u5f97\u8fd8\u662f\u76f4\u63a5\u4f7f\u7528Pusher\u6bd4\u8f83\u597d\u3002<\/p>\n<p>\u5982\u679c\u6709\u4efb\u4f55\u4e0d\u987a\u5229\u6216\u8005\u4e0d\u7406\u89e3\u7684\u5730\u65b9\uff0c\u8bf7\u5728\u8bc4\u8bba\u4e2d\u544a\u8bc9\u6211\u3002<\/p>\n<p>\u975e\u5e38\u611f\u8c22\u4f60\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u6bb5\u65f6\u95f4\uff0c\u6211\u5728\u4e1a\u52a1\u4e2d\u4f7f\u7528\u4e86Laravel Echo\uff0c\u5c06\u672a\u8bfb\u901a\u77e5\u7684\u529f\u80fd\u5b9e\u73b0\u5728Flutter\u5e94\u7528\u4e2d\u3002 \u6211\u60f3\u8981\u4e00\u5e76\u53d1 [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34134","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528laravel-echo\u548claravel-echo-server\u5728flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\" \/>\n<meta property=\"og:description\" content=\"\u524d\u6bb5\u65f6\u95f4\uff0c\u6211\u5728\u4e1a\u52a1\u4e2d\u4f7f\u7528\u4e86Laravel Echo\uff0c\u5c06\u672a\u8bfb\u901a\u77e5\u7684\u529f\u80fd\u5b9e\u73b0\u5728Flutter\u5e94\u7528\u4e2d\u3002 \u6211\u60f3\u8981\u4e00\u5e76\u53d1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528laravel-echo\u548claravel-echo-server\u5728flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-16T03:45:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T14:17:36+00:00\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/\",\"name\":\"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-16T03:45:58+00:00\",\"dateModified\":\"2024-04-28T14:17:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528laravel-echo\u548claravel-echo-server\u5728flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1","og_description":"\u524d\u6bb5\u65f6\u95f4\uff0c\u6211\u5728\u4e1a\u52a1\u4e2d\u4f7f\u7528\u4e86Laravel Echo\uff0c\u5c06\u672a\u8bfb\u901a\u77e5\u7684\u529f\u80fd\u5b9e\u73b0\u5728Flutter\u5e94\u7528\u4e2d\u3002 \u6211\u60f3\u8981\u4e00\u5e76\u53d1 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528laravel-echo\u548claravel-echo-server\u5728flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-16T03:45:58+00:00","article_modified_time":"2024-04-28T14:17:36+00:00","author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/","name":"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-16T03:45:58+00:00","dateModified":"2024-04-28T14:17:36+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Laravel Echo\u548cLaravel Echo Server\u5728Flutter\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8fdb\u884c\u53cc\u5411\u901a\u4fe1"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8laravel-echo%e5%92%8claravel-echo-server%e5%9c%a8flutter%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%8f%8c%e5%90%91%e9%80%9a%e4%bf%a1%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=34134"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34134\/revisions"}],"predecessor-version":[{"id":61105,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34134\/revisions\/61105"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=34134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=34134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=34134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}