首页 > Web开发 > 详细

使用Websocket+Swoole+CodeIngiter做聊天室

时间:2015-12-06 17:38:26      阅读:204      评论:0      收藏:0      [点我收藏+]

前端H5代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var socket = new WebSocket(ws://192.168.122.128:9502);

    // 打开Socket
    socket.onopen = function(event) {
        socket.send({"user":"<?php echo $user;?>" ,"type":"1"});
    };
    socket.onmessage=function(event){
     
        var data=eval("("+event.data+")");
        console.log(data);
       document.getElementById(text).value+=data.msg+"\n";
    }
    function sendMessage(touser){
        var msg={"type":"2","msg":"+document.getElementById(msgbox).value+","from_user":"<?php echo $user;?>","touser":"+touser+"};
        socket.send(msg);
    }

</script>
<textarea name="" id="text" cols="30" rows="10"></textarea>
<input type="text" name="msgbox" id="msgbox" />
<button onclick="sendMessage(‘all‘);">发送</button>
</body>
</html>

 

后台CI代码:

用户先登录,登录后,进入chat/index页面

include_once(Auth.php);
class Chat extends Auth {
    public function __construct(){
        parent::__construct();
        echo $this->username;
    }

    public function index(){
        $this->load->helper(url);
        $data=array(
            user=>$this->username,
        );

        $this->load->view(chat.php,$data);
    }
}

在CLI模式下运行swoole/start 页面

cd /mnt/hgfs/wwwroot/chat
php index.php swoole start

 

swoole/start 代码

$server = new swoole_websocket_server("0.0.0.0", 9502);

        $server->on(open, function (swoole_websocket_server $server, $request) {
            echo "server: handshake success with fd{$request->fd}\n";
        });

        $server->on(message, function (swoole_websocket_server $server, $frame) {
           // echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";

            $data=(array)json_decode($frame->data,true);
            print_r($data);
            if($data[type]==1){
                echo " {$data[‘user‘]} 进入聊天室!\n";
                $this->load->driver(cache);
                $cache=$this->cache->file->get(clients);
                $tmp=array();
                if($cache){
                    $tmp=unserialize($cache);
                    $tmp[$frame->fd]=array(
                        id=>$frame->fd,
                        user=>$data[user],
                    );
                    $save=serialize($tmp);
                    $this->cache->file->save(clients,$save,300);
                }else{
                    $tmp[$frame->fd]=array(
                        id=>$frame->fd,
                        user=>$data[user],
                    );
                    $this->cache->file->save(clients,serialize($tmp),300);//缓存在线用户
                }
                foreach($tmp as $v) {
                    $server->push($v[id], json_encode(array(type => 1, msg => "欢迎{$data[‘user‘]}进入聊天室!")));
                }
            }else if($data[type]==2){
                echo " {$data[‘from_user‘]} 对大家说:{$data[‘msg‘]} !\n";
                if($data[touser]==all){
                    echo 所有用户;
                    $cache=$this->cache->file->get(clients);
                    $tmp=unserialize($cache);
                    foreach($tmp as $v){
                        $server->push($v[id],json_encode(array(type=>2,msg=>"用户{$data[‘from_user‘]}对大家说:{$data[‘msg‘]} !")));
                    }
                }
            }


        });

        $server->on(close, function (swoole_websocket_server $server, $fd) {
            $cache=$this->cache->file->get(clients);
            $tmp=unserialize($cache);
            unset($tmp[$fd]);
            $this->cache->file->save(clients,serialize($tmp),500);
            echo "client {$fd} closed\n";
            foreach($tmp as $v){
                $server->push($v[id],json_encode(array(type=>3,msg=>"用户{$v[‘user‘]}离开了聊天室。")));
             }
        });

        $server->start();

 

 

技术分享

功能比较简单,结合websocket+CodeIngiter+swoole。

以后整合到android APP上。

使用Websocket+Swoole+CodeIngiter做聊天室

原文:http://www.cnblogs.com/fover/p/5023788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!