swoole开发聊天室demo 代码可以直接下载(chat_demo.rar)
代码如下:<?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();