Swoole实现聊天室

效果图:

Swoole实现聊天室

 

 

服务器代码(服务器新建websocket.php文件):

<?php
//创建一个websocket服务   0.0.0.0:6069
$ws = new Swoole\WebSocket\Server('0.0.0.0','6069');

//监听浏览器客户端有没有客户连接上我们的服务
//$request->fd客户端的唯一标识
//参数1:推送给谁   参数2:推送内容
$ws->on('Open', function ($ws, $request) {
    $content = '监听到客户端'.$request->fd."连接了服务\n";
    echo $content;//服务器上能看见的信息
    $ws->push($request->fd, json_encode(['person'=>'官方','content'=>'欢迎来到聊天室~'],256));//推送(到浏览器)
});

//监听浏览器客户端有没有给我们的服务发送内容
//$frame->data 用户发送的内容
$ws->on('Message', function ($ws, $frame) {
    if($frame->data=='你好'){
        $msg = '你好';
    }else if($frame->data == '在吗'){
        $msg = '我在';
    }else{
        $msg = '请联系人工客服';
    }
    $content = json_encode(['person'=>'客服','content'=>$msg],256);
    $ws->push($frame->fd, $content);//将信息推送到浏览器
});

//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {
    echo '监听到客户端'.$fd."断开连接\n";
});

//启动服务
$ws->start();

 

要记得运行:

Swoole实现聊天室

 

 

客户端代码(这里使用vue完成的):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        
        <div class="root">
            <div>
                <p v-for="(item,index) in arr">
                    {{item.person}}:{{item.content}}
                </p>
            </div>
            <div>
                <input type="text" placeholder="请输入内容..." v-model="content">
                <button type="button" @click="sendMessage()">发送</button>
            </div>
        </div>
        
    </body>
</html>

<script>
    //在Vue中,获取文本框的内容使用双向绑定来实现   v-model
    new Vue({
        el:'.root',//绑定的元素
        data:{
            //页面中的自定义数据(绑定以后data中的数据只能在绑定的标签中使用)
            wsObj:'',//socket对象
            content:'',//用户输入的内容
            arr:[]//消息列表
        },
        methods:{
            //自定义方法
            sendMessage(){
                this.arr.push({person:'我',content:this.content})
                
                this.wsObj.send(this.content)//向服务器发内容
            }
        },
        created() {
            //页面加载完成之后自动运行
            //连接websocket   this表示当前Vue实例
            this.wsObj = new WebSocket('ws://39.99.240.121:6069');
            //监听是否连接上服务
            this.wsObj.onopen = function(){
                console.log('连接已经建立');
            }
            var obj = this;
            //监听的是客户端接收服务端数据时触发
            this.wsObj.onmessage = function(e){
                var json = JSON.parse(e.data)
                obj.arr.push(json)
            }
        }
    })
</script>

 

上一篇:websocket协议


下一篇:SAP新版SOAMANAGER下WebService配置