This article mainly introduces PHP+swoole group chat function, interested friends reference, hope to help you.
The PHP code:
$serv = new swoole_websocket_server("127.0.0.1", 3999); // Basic setup of the service$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; }); / / test the 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,"Welcome! Welcome!");
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="Say: I am coming ~";
break;
default:
$send_msg="Said: {$data['msg']['speak']}";
break;
}
foreach ($serv->connections as $conn) {if ($conn! =$data['fd']) {if (strpos($data['msg'] ['name']."Tourists") = = = 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;
}Copy the code
Front-end code:
<! DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>WebSocket test </title> <script language="javascript"type="text/javascript" src="Jquery - 1.12.0. Min. Js"> </script> </head> <body> <h2>WebSocket Test</h2> nickname: <inputtype="text" id="name" size="5" value="Tourists"/> <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>
<p id="output"></p>
</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("Connected server.........");
speak_msg=get_speak_msg();
send_msg=pack_msg("login",speak_msg);
doSend(send_msg);
}
function onClose(evt) {
append_speak("Oh, my grandson!");
}
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>Copy the code
Conclusion: The above is the whole content of this article, I hope to help you learn.
I hope the above content can help you. Many PHPer will encounter some problems and bottlenecks when they are advanced, and they have no sense of direction when writing too many business codes. I have sorted out some information, including but not limited to: Distributed architecture, high scalability, high performance, high concurrency, server performance tuning, TP6, Laravel, YII2, Redis, Swoole, Swoft, Kafka, Mysql optimization, shell scripting, Docker, microservices, Nginx, etc.