Home > php教程 > php手册 > body text

PHP+swoole实现简单多人在线聊天群发,swoole在线聊天

WBOY
Release: 2016-06-13 08:47:24
Original
1349 people have browsed it

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;
}
Copy after login

前端代码:

<!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>
Copy after login

推荐文章:php安装swoole扩展的方法    使用swoole扩展php websocket示例

以上代码给大家分享了PHP+swoole实现简单多人在线聊天群发的相关代码,希望本文所述对大家有所帮助。

您可能感兴趣的文章:

  • 使用swoole扩展php websocket示例
  • PHP框架Swoole定时器Timer特性分析
  • php异步多线程swoole用法实例
  • php安装swoole扩展的方法
  • Swoole-1.7.22 版本已发布,修复PHP7相关问题
  • 使用php+swoole对client数据实时更新(一)
Related labels:
source:php.cn
Statement of this Website
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
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template