實時通信的「聊天室」源碼,Ctrl+c/v就可以用!!!

 workman 是高性能socket服務框架 、底部技術羣交流

首先,我在這裏聲明非常重要一點,觀看這篇文章一定要知道,這個實現是一款 workerman+socket+php 製作的一款「簡陋web聊天室」,沒有任何樣式、功能也是很單一(實時通信,羣發,下線提醒)。寫這個目的爲學習workman、swoole的朋友一個簡單參考方案。因此無腦鍵盤,切記~~~

workerman是一個高性能的PHP socket 服務器框架,workerman基於PHP多進程以及libevent事件輪詢庫,PHP開發者只要實現一兩個接口,便可以開發出自己的網絡應用,例如Rpc服務、聊天室服務器、手機遊戲服務器等。

workerman的目標是讓PHP開發者更容易的開發出基於socket的高性能的應用服務,而不用去了解PHP socket以及PHP多進程細節。workerman本身是一個PHP多進程服務器框架,具有PHP進程管理以及socket通信的模塊,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立運行

第1步

下載workerman

workerman下載地址:https://www.workerman.net/download

第2步


創建目錄、以及複製代碼

將workerman框架用編輯器打開,然後在它同級目錄下創建一個php文件,比如index.php,然後將我下面的代碼全部複製,粘貼到這個index.php中。

<?php


use Workerman\Worker;


require_once __DIR__ . '/Workerman-master/Autoloader.php';


// 創建一個websocket的Worker監聽2000接口
$ws_worker = new Worker("websocket://0.0.0.0:2000");


// 只啓動1個進程,這樣方便客戶端之間傳輸數據
$ws_worker->count = 1;


//模擬登陸,設用戶id
$global_uid = 0;


// 當客戶端連上來時分配uid,並保存連接,並通知所有客戶端
$ws_worker->onConnect = function ($connection)
{
    global $ws_worker, $global_uid;
    // 爲這個連接分配一個uid
    $connection->uid = ++$global_uid;
};


// 當客戶端發送消息過來時,轉發給所有人
//這裏data☞用戶發送過來的數據
$ws_worker->onMessage =function($connection, $data)
{
    global $ws_worker;
    //循環用戶id,併發送信息
    foreach($ws_worker->connections as $conn)
    {
        //給用戶發送信息
        $conn->send("用戶id[{$connection->uid}] 說: $data");
    }
};


// 當客戶端斷開時,廣播給所有客戶端
$ws_worker->onClose=function($connection)
{
    global $ws_worker;
    //循環用戶id,併發送信息
    foreach($ws_worker->connections as $conn)
    {
        //給用戶發送信息
        $conn->send("用戶id[{$connection->uid}] 斷開鏈接");
    }
};
// 運行worker
Worker::runAll();


第3步


啓動socket服務

打開cmd到項目的根目錄以cli的方式運行PHP文件(注:windows下需要配置php環境變量),啓動服務即可。

第4步


複製前端代碼

然後創建一個html頁面,將我下面代碼在複製到這個html頁面中,這裏html引入了boot cdn的vue,直接將域名指向創建的html頁。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="app">
    <ul>
        <li v-for = "v in data">{{v}}</li>
    </ul>
    <!--@submit代表表單提交後執行一個叫onsub的方法-->
    <!--prevent代表阻止表單提交-->
    <form @submit.prevent = "onSub">
        <input type="text" v-model = "content">
        <input type="submit" value="提交">
    </form>


</div>


<script src="https://cdn.bootcss.com/vue/2.6.10/vue.common.dev.js"></script>
<script>
    let ws = new WebSocket("ws://127.0.0.1:2000");
    let app = new Vue({
        el : "#app",
        data : {
            data:[],
            content : '',
        },
        created : function(){//created創建vue實例後執行的第一個方法
            //message接收php workman發送過來的數據
            ws.onmessage = function (ev) {
                //將值傳入的data數組中
                this.data.push(ev.data);
            }.bind(this);
        },
        methods:{
            onSub : function () {
                //發送給php workman
                ws.send(this.content);
            }
        }
    })
</script>
</body>
</html>


第5步


開啓瀏覽器瀏覽

然後同時以兩個不同的瀏覽器打開html就可以看到輸入的同步信息的效果了。對方關閉當前頁面也會提示。(注:cmd窗口不要關閉)

————————end————————

WeChat微信羣交流「WeChat:xzzs730

   喜歡的夥伴可以 長按 ↓ 下方圖片 掃碼加羣 

php web mysql Linux 其他

這裏是一個實驗場,希望給讀者呈現一副關於中國互聯網編程技術的「清明上河圖」。
對互聯網編程技術感興趣「WeChat:xzzs730」審覈通過,進入我們技術交流問題提問解答羣。

【每日微信技術分享記錄】

鏈接:微信技術分享記錄 

https://github.com/gtcarry888/WeChat-Sharing-record

鏈接:小程序相關源碼 

https://github.com/gtcarry888/Source-code

鏈接:互聯網編程資源手冊 

https://github.com/gtcarry888/Idle-it-resources

原則:羣內禁止鄙視、諷刺等任何初學者,否則直接踢羣,禁止任何業餘廣告推廣。

如有其他問題,可聯繫上述微信或者留言至[email protected]郵箱。

喜歡的夥伴可以 長按 ↓ 下方圖片 關注我的公衆號 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章