Home  >  Article  >  php教程  >  php使用swoole实现一个简单的多人在线聊天群发,swoole在线聊天

php使用swoole实现一个简单的多人在线聊天群发,swoole在线聊天

WBOY
WBOYOriginal
2016-06-13 08:47:29934browse

php使用swoole实现一个简单的多人在线聊天群发,swoole在线聊天

聊天逻辑的好多细节没有实现,只实现群发。

php代码:

$serv = new swoole_websocket_server("127.0.0.1",3999);

//服务的基本设置
$serv->set(array(
		'worker_num' => 2,
		'reactor_num'=>8,
		'task_worker_num'=>1,
		'dispatch_mode' => 2,
		'debug_mode'=> 1,
		'daemonize' => true,
		'log_file' => __DIR__.'/log/webs_swoole.log',
		'heartbeat_check_interval' => 60,
		'heartbeat_idle_time' => 600,
));

$serv->on('connect', function ($serv,$fd){
// 	echo "client:$fd Connect.".PHP_EOL;
});

//测试receive
$serv->on("receive",function(swoole_server $serv,$fd,$from_id,$data){
// 	echo "receive#{$from_id}: receive $data ".PHP_EOL;
});

$serv->on('open', function($server, $req) {
// 	echo "server#{$server->worker_pid}: handshake success with fd#{$req->fd}".PHP_EOL;;
// 	echo PHP_EOL;
});

$serv->on('message',function($server,$frame) {
// 	echo "message: ".$frame->data.PHP_EOL;
	$msg=json_decode($frame->data,true);
	switch ($msg['type']){
		case 'login':
			$server->push($frame->fd,"欢迎欢迎~");
			break;
		default:
			break;
	}
	$msg['fd']=$frame->fd;
	$server->task($msg);
});

$serv->on("workerstart",function($server,$workerid){
// 	echo "workerstart: ".$workerid.PHP_EOL;
// 	echo PHP_EOL;
});

$serv->on("task","on_task");
$serv->on("finish",function($serv,$task_id,$data){
	return ;
});
$serv->on('close', function($server,$fd,$from_id) {
// 	echo "connection close: ".$fd.PHP_EOL;
// 	echo PHP_EOL;
});

$serv->start();
function on_task($serv,$task_id,$from_id,$data) {
	switch ($data['type']){
		case 'login':
			$send_msg="说:我来了~";
			break;
		default:
			$send_msg="说:{$data['msg']['speak']}";
			break;
	}
	foreach ($serv->connections as $conn){
		if ($conn!=$data['fd']){
			if (strpos($data['msg']['name'],"游客")===0){
				$name=$data['msg']['name']."_".$data['fd'];
			}else{
				$name=$data['msg']['name'];
			}
		}else{
			$name="我";
		}
		$serv->push($conn,$name.$send_msg);
	}
	return;
}

function on_finish($serv,$task_id,$data){
	return true;
}

  

前端代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WebSocket测试</title> 
<script language="javascript"type="text/javascript" src="jquery-1.12.0.min.js"> 
</script>
</head>

<body>
<h2>WebSocket Test</h2>  
昵称:<input type="text" id="name" size="5" value="游客"/>     <input type="text" id="content"> 
<button onclick="speak_to_all()">发送</button>
<br/><br/>
<textarea id="message" style="overflow-x:hidden" rows="10" cols="50"></textarea> 
<div id="output"></div>
</body> 

<script language="javascript"type="text/javascript">  
    var wsUri ="ws://127.0.0.1:3999/"; 
    var output;  
    function init() { 
        output = document.getElementById("output"); 
        testWebSocket();
    }
    function testWebSocket() { 
        websocket = new WebSocket(wsUri); 
        websocket.onopen = function(evt) { 
            onOpen(evt) 
        }; 
        websocket.onclose = function(evt) { 
            onClose(evt) 
        }; 
        websocket.onmessage = function(evt) { 
            onMessage(evt) 
        }; 
        websocket.onerror = function(evt) { 
            onError(evt) 
        }; 
    }
    function get_speak_msg(){
    	var name=document.getElementById("name").value;
    	var speak=document.getElementById("content").value;
    	var json_msg='{"name":"'+name+'","speak":\"'+speak+'"}';
    	return json_msg;
    }
	    
	function pack_msg(type,msg){
		return '{"type":"'+type+'","msg":'+msg+'}';
	}
		
    function onOpen(evt) {
    	append_speak("已经联通服务器.........");
    	speak_msg=get_speak_msg();
    	send_msg=pack_msg("login",speak_msg);
        doSend(send_msg);
    }
	
    function onClose(evt) { 
    	append_speak("俺老孙去也!");
    } 
	    
    function onMessage(evt) {
    	append_speak(evt.data);
    }
	    
    function onError(evt) {
    	alert(evt.data);
    }
    
    function doSend(message) { 
        websocket.send(message);
    }
	
 	function append_speak(new_msg){
  		document.getElementById("message").value=document.getElementById("message").value+new_msg+"\n";
 		document.getElementById('message').scrollTop = document.getElementById('message').scrollHeight;
 	}
 	
 	function speak_to_all(){
 		send_msg=pack_msg("speak",get_speak_msg());
 		if(document.getElementById("content").value==""){
 			return;
 		}
 		doSend(send_msg);
 		document.getElementById("content").value="";
 	}
 	init();
</script>
</html>

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn