爱程序网

php使用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>

 

相关文章列表:
关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助