web即时聊天PHP版

基于workerman的PC端及手机端客服系统

第一步部署服务器

1.在workerman官网下载库,放在项目目录下
2.通信服务器,一个需要命令行执行的PHP脚本,不依赖于Apache和NGINX;下面看代码:

<?php
use Workerman\Worker;
require_once __DIR__ . '/webChat/Autoloader.php';

// 创建一个Worker监听端口,协议一般是websocket,地址0.0.0.0表示其他所有都可连接,如果只要本地可连接改为本地地址,端口一般2000以上
$worker = new Worker("websocket://0.0.0.0:2016");
// 启动4个进程对外提供服务,如果要实现一对一聊天,切记只开一个进程
$worker->count = 1;
//定义一个连接池
$connectArr = array();
//服务端收到消息
$worker->onMessage = function($con, $msg) use(&$connectArr){
    $msgArr = json_decode($msg,true);
    $from = @$msgArr['from'];
    $to = @$msgArr['to'];
    $sendtime = time();
    switch($msgArr['act']){
        case 'connect':
            if(!isset($connectArr[$from])){
                //存入连接池
                $connectArr[$from] = $con->id;
            }
            break;
            //$con->send($from.'上线了,连接ID是:'.$con->id);
        case 'message':
            $msgtype = @$msgArr['msgtype'];
            $content = @$msgArr['content'];
            $isread = 0;
            if(isset($connectArr[$to])){
                $isread = 1;
                $returnmsg = json_encode(array('from'=>$from,'to'=>$to,'msgtype'=>$msgtype,'content'=>$content,'sendtime'=>$sendtime,'isread'=>1));
                $con->worker->connections[$connectArr[$to]]->send($returnmsg);
                //需要群发的话就循环连接池数组一个个发送;
            }
            break;
    }
    //$con->send(json_encode($connectArr));
};
//send()方法不能直接发送数组,需要转为json
//客户端关闭时
$worker->onClose = function($con) use(&$connectArr){
    $k = array_search($con->id, $connectArr);
    unset($connectArr[$k]);
    //$con->send('关闭');
};
Worker::runAll();

第二步前端JS连接

var con = new WebSocket('ws://你的地址:2016');
con.onopen = function(){
    var msg = {act:'connect',from:cid,to:to,msgtype:1,content:'你说什么'};//连接请求,存身份id入连接池
    con.send(JSON.stringify(msg));
};
//收到消息触发
con.onmessage = function(msg){
    //根据消息类型做不同处理
    var message = $.parseJSON(msg.data);//这一句必须
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值