成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一個(gè)基于 Laravel5.4+Vue+Redis 實(shí)時(shí)聊天的小 demo

chengjianhua / 1477人閱讀

摘要:我厚著臉皮向發(fā)出了呼喚。。向超神簡單的描述一番后。底層的東西還是朦朦朧朧的。但對(duì)于剛?cè)腴T的新手來說,這是比較有用的。

一個(gè)基于Laravel+Vue+Redis 實(shí)時(shí)聊天的小demo

這篇是基于一個(gè)基于 Laravel5.4+Vue+Pusher 實(shí)時(shí)聊天的小 demo

當(dāng)然也可以獨(dú)立出來,只需要把驅(qū)動(dòng)換成 Redis 就可以了

GitHub 直達(dá)

https://github.com/jplhomer/laravel-realtime-chat-demo

git

git clone https://github.com/jplhomer/laravel-realtime-chat-demo project

由于 GitHub 是基于 Pusher 的 所以安裝之前需要一些修改

進(jìn)入 composion.json

去掉 "pusher/pusher-php-server": "^2.6"

增加 "predis/predis": "^1.1"

然后 composer 安裝

cd project 

composer install

配置數(shù)據(jù)庫及 key

cp .env.example .env

art key:generate

配置驅(qū)動(dòng)

BROADCAST_DRIVER=redis

遷移

art migtate

然后進(jìn)入 package.json

去掉 "pusher-js": "^4.0.0"

yarn 或 npm 安裝

yarn 

npm

yarn 或者 npm 打包

yarn run dev

npm run dev  
  

由于 Redis 使用的 Socket.IO 因此需要配置客戶端 Socket.io 和服務(wù)員端 Socket.io

客戶端 Socket.IO

進(jìn)入 bootstrap.js

window.Echo = new Echo({
    broadcaster: "socket.io",
    host: "http://yourdomain.app:6001"
});

進(jìn)入 app.blade.php head 中增加


服務(wù)端 laravel-echo-server

yarn add laravel-echo-server

或者 npm install laravel-echo-server

安裝完成后 生成服務(wù)端的配置文件 啟動(dòng)后會(huì)讀取這個(gè)配置文件

laravel-echo-server init

我的配置文件

{
    "authHost": "http://delo.app",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": false,
    "host": "delo.app",
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": ""
}

如果不運(yùn)行 laravel-echo-server init 的話 可以新建一個(gè) laravel-echo-server.json 的文件 復(fù)制上面的內(nèi)容進(jìn)去 修改成你的主機(jī)就可以了
最后在 app.blade.php 中引入

    

啟動(dòng)

            
            laravel-echo-server start

ok 最后注冊(cè)兩個(gè)賬號(hào)開始實(shí)驗(yàn)吧

你可能發(fā)現(xiàn) 在一個(gè)瀏覽器每刷新一次后,另一個(gè)瀏覽器的在線數(shù)都會(huì)加 1 ,但是用 pusher 的話就不會(huì)出現(xiàn)這個(gè)問題(這是為什么?)。奇怪

如何解決呢 其中走了好多彎路

剛開始的時(shí)候 想的是數(shù)組去重的方法

在 app.js 中你會(huì)發(fā)現(xiàn)

Echo.join("chatroom")
            .here((users) => {
                this.usersInRoom = users;
            })
            .joining((user) => {
                this.usersInRoom.push(user);
            })
            .leaving((user) => {
                this.usersInRoom = this.usersInRoom.filter(u => u != user)
            })
            .listen("MessagePosted", (e) => {
                this.messages.push({
                    message: e.message.message,
                    user: e.user
                });
            });

本來想著百度一個(gè)數(shù)組的去重方法 像這樣的

Array.prototype.unique = function(){
 var res = [];
 var json = {};
 for(var i = 0; i < this.length; i++){
  if(!json[this[i]]){
   res.push(this[i]);
   json[this[i]] = 1;
  }
 }
 return res;
}
var arr = [112,112,34,"你好",112,112,34,"你好","str","str1"];
alert(arr.unique());

但經(jīng)過 leo 的指點(diǎn) 有個(gè)插件非常好用 lodash 安裝后

只需這樣

this.usersInRoom=_.uniq(this.usersInRoom)

接下來 又是一個(gè)奇怪的事情 console.log(this.usersInRoom) 發(fā)現(xiàn)新增加的竟然是一個(gè)對(duì)象。數(shù)組去重就不行了。

我厚著臉皮向 overtrue 發(fā)出了呼喚 。。

向超神簡單的描述一番后。 超神說 "返回的應(yīng)該是對(duì)象,可以考慮用 ID" 撥云見日

this.usersRoom=users

users 既然是對(duì)象的話,讓它返回 id 就可以了

users 是在哪里返回的呢,在BroadcastServiceProvider發(fā)現(xiàn)

 require base_path("routes/channels.php");
 

進(jìn)入 routes/channels.php

Broadcast::channel("chatroom", function ($user) {
    return $user;
});

修改為

Broadcast::channel("chatroom", function ($user) {
        return $user->id;
    });

ok 柳暗花明!

總結(jié): 雖然寫了基于 pusher 和 redis 廣播的兩個(gè)小 demo,但還是游離于配置層面。底層的東西還是朦朦朧朧的。但對(duì)于剛?cè)腴T的新手來說,這是比較有用的。因?yàn)槲冶容^喜歡,先把東西呈現(xiàn)出來,然后再去深入。

一個(gè) demo 愛好者

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/83772.html

相關(guān)文章

  • 一個(gè)基于 Laravel5.4+Vue+Redis 實(shí)時(shí)聊天的小 demo

    摘要:我厚著臉皮向發(fā)出了呼喚。。向超神簡單的描述一番后。底層的東西還是朦朦朧朧的。但對(duì)于剛?cè)腴T的新手來說,這是比較有用的。 一個(gè)基于Laravel+Vue+Redis 實(shí)時(shí)聊天的小demo 這篇是基于一個(gè)基于 Laravel5.4+Vue+Pusher 實(shí)時(shí)聊天的小 demo 當(dāng)然也可以獨(dú)立出來,只需要把驅(qū)動(dòng)換成 Redis 就可以了 GitHub 直達(dá) https://github.com...

    lanffy 評(píng)論0 收藏0
  • 全棧開發(fā)——?jiǎng)邮执蛟鞂儆谧约旱闹辈ラg(Vue+SpringBoot+Nginx)

    摘要:經(jīng)過琢磨,其實(shí)是要考慮安全性的。具體在以下幾個(gè)方面跨域連接協(xié)議升級(jí)前握手?jǐn)r截器消息信道攔截器對(duì)于跨域問題,我們可以通過方法來設(shè)置可連接的域名,防止跨站連接。 前言 大學(xué)的學(xué)習(xí)時(shí)光臨近尾聲,感嘆時(shí)光匆匆,三年一晃而過。同學(xué)們都忙著找工作,我也在這里拋一份簡歷吧,歡迎各位老板和獵手誠邀。我們進(jìn)入正題。直播行業(yè)是當(dāng)前火熱的行業(yè),誰都想從中分得一杯羹,直播養(yǎng)活了一大批人,一個(gè)平臺(tái)主播粗略估計(jì)就...

    e10101 評(píng)論0 收藏0
  • 造個(gè)輪子,基于 Laravel5.4 的下一代 PHP 開發(fā)框架 (API/SPA/Vue2/iVi

    摘要:像操作系統(tǒng)一樣,你可以通過安裝軟件,成為適用于你的電腦。先進(jìn)的技術(shù)方案,使得你無需擔(dān)心后期功能拓展與迭代問題,大大降低了維護(hù)成本。對(duì)于一個(gè)超過三年生命周期的項(xiàng)目來說,最適合不過??傊切碌募夹g(shù)方向標(biāo),能讓每個(gè)藝術(shù)家像構(gòu)建工程一樣構(gòu)建程序。 這是我們團(tuán)隊(duì)的一個(gè)非盈利項(xiàng)目,以Apache2.0協(xié)議開源...不限制商用 Notadd是什么 Notadd 是基于Laravel 和 Vue 的...

    Rocture 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<