php 利用redis写一个聊天室,php php+swoole+redis聊天室|swoole聊天室

swoole开发聊天室demo 代码可以直接下载(chat_demo.rar)

481e238e64d10e9f9fd9a92cbf798fd0.png

代码如下:<?php

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

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);

echo "Server is running: " . $redis->ping();

$server->set(array(

'daemonize' => false,

'worker_num' => 2,

));

$server->on('open', function (swoole_websocket_server $server, $request) {

global  $redis;

$arr = array(

'id'            =>  $request->fd,

);

$redis -> hMset("myhash_user".$request->fd,$arr);

//echo "server: handshake success with fd{$request->fd}\n";

});

$server->on('message', function (swoole_websocket_server $server, $frame) {

global  $redis;

//例子:{"type":1,"username":"梁巨才"}

$data = json_decode($frame->data,true);

//用户等登录

if($data['type'] == 1){

$arr = array(

'username'  =>      $data['username']

);

$redis -> hMset("myhash_user".$frame->fd,$arr);

$user_list = $redis->keys('myhash_user*');

$all_uer = array();

foreach ($user_list as $k => $v) {

$id = $redis->hGet($v,'id');

if($id!=$frame->fd){

$server->push($id,json_encode(array('type'=>2,'list'=>array('0'=>array('id'=>$frame->fd,'username'=>$data['username'])))));

}

array_push($all_uer,array('id'=>$redis->hGet($v,'id'),'username'=>$redis->hGet($v,'username')));

}

$server->push($frame->fd,json_encode(array('type'=>2,'list'=>$all_uer)));

}elseif($data['type'] == 3){//发送消息

//例子: {"type":3,"to":0,"content":"消息内容"}

if($data['to']==0){

//发送所有人

$user_list = $redis->keys('myhash_user*');

$all_uer = array();

foreach ($user_list as $k => $v) {

$id = $redis->hGet($v,'id');

$server->push($id,json_encode(array('type'=>3,'data'=>array('0'=>array('username'=>$redis->hGet('myhash_user'.$frame->fd,'username'),'content'=>$data['content'])))));

}

}else{

//发送个人

$server->push($data['to'],json_encode(array('type'=>3,'data'=>array('0'=>array('username'=>$redis->hGet($v,'username'),'content'=>$data['content'])))));

}

}

});

$server->on('close', function ($ser, $fd) {

global  $redis;

$redis -> del(array('myhash_user'.$fd ));

foreach($ser->connections as $k => $v) {

if($v!=$fd){

$ser->push($v,json_encode(array('type'=>4,'id'=>$fd)));

}

}

});

$server->start();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值