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


Posted in PHP onJanuary 19, 2016

由于本文的能力有限,有好多聊天逻辑的细节没有实现,只实现了群发,具体代码如下所示:

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>

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

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

PHP 相关文章推荐
php的header和asp中的redirect比较
Oct 09 PHP
第八节--访问方式
Nov 16 PHP
实用函数5
Nov 08 PHP
PHP 验证码的实现代码
Jul 17 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
跟我学Laravel之快速入门
Oct 15 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
PHP chop()函数讲解
Feb 11 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 #PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 #PHP
PHP数组去重比较快的实现方式
Jan 19 #PHP
PHP保存session到memcache服务器的方法
Jan 19 #PHP
PHP mysql事务问题实例分析
Jan 18 #PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 #PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 #PHP
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
基于python 取余问题(%)详解
2020/06/03 Python
女娲补天教学反思
2014/02/05 职场文书
中学生英语演讲稿
2014/04/26 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
白银帝国观后感
2015/06/17 职场文书
中学团支部工作总结
2015/08/13 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript