PHP+swoole实现聊天群发功能

本篇文章主要介绍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>

<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> 

<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("已经联通服务器.........");

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>

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处

原文地址:https://www.cnblogs.com/a609251438/p/12127505.html

时间: 2024-10-22 15:22:11

PHP+swoole实现聊天群发功能的相关文章

Android---47---短信群发功能

提供一个带列表的对话框供用户选择群发短信的收件人号码,程序则使用了一个ArrayList<String>集合来保存所有的收件人的号码 为了实现群发功能,程序循环遍历ArrayList中的号码,依次向每个号码发送短信即可. public class MainActivity extends Activity { EditText numbers, content; Button select, send; SmsManager smsManager; // 记录列表 ArrayList<S

微信公众号实践第一弹:群发功能

用微信订阅号群发功能群发信息(图文信息),遇到的现象: 1.封面图片选择的为gif格式的动态图片,作为封面之后不能动,同时可能是图片高度问题,导致一部分图片文字在手机上看不到 2.发布出去的图文在(标题,时间)那个地方自带蓝色的订阅号名称,误认为自己手动设置 3.第一次发布图文信息,误认为封面图片为正文图片,导致正文只有文字,没有计划的图片 订阅号二维码: 每天进步一小步,回首已是百里路!

邮件群发定时群发功能

小编小时候很喜欢读一类童话故事:传说中某位拥有绝顶神技的高手,被邪恶势力下了魔咒,禁锢在一个黑暗阴森不见天日的地方,直到机缘凑巧一个“特殊 的时间”,“有缘人”的到来,唤醒他们,激发他们的战斗欲望,他们才焕发出旺盛的斗志和强大的信心,比方说孙悟空那只猴子被压在五指山下500年,直等到 唐僧来释放他.营销人员做产品推广活动也即是与顾客“结缘”,他们使尽浑身解数,为的是唤醒顾客的需求,激发起购买欲望,那么你怎么能等到那个“特殊的时 间”进行恰到好处的推广从而形成“催化剂”呢?小编这就要介绍U-Mai

Swoole 实例二(Task功能)

直接上代码 服务端代码(server.php) <?php /*  swoole Task运行实例  Task简介  Swoole的业务逻辑部分是同步阻塞运行的,如果遇到一些耗时较大的操作,例如访问数据库.广播消息等,就会影响服务器的响应速度.因此Swoole提供了Task功能,将这些耗时操作放到另外的进程去处理,当前进程继续执行后面的逻辑.  运行Task,需要在swoole服务中配置参数 task_worker_num,即可开启task功能.此外,必须给swoole_server绑定两个回调

黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?

欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.exception.site/essay/how-to-use-gitter-on-your-website-quickly 一.前言 小哈从很早以前就有写博文的习惯,不过那个时候,也没咋认真地写,倒是挺喜欢倒腾,从最初在 CSDN 写博客,写了得有 100 多篇后,那时,CSDN 开始加入了恶心的广告,体验开始

SignalR实现在线聊天室功能(欢迎、发送、回复、私信、屏蔽)

一.在线聊天室 1.新建解决方案 SignalROnlineChatDemo 2.新建MVC项目 SignalROnlineChatDemo.Web (无身份验证) 3.安装SignalR PM> install-package Microsoft.AspNet.SignalR 4. 创建一个称为 Startup.cs 的新类 1 public class Startup 2 { 3 public void Configuration(IAppBuilder app) 4 { 5 // 有关如何

swoole webSocket 聊天室示例

swoole1.7.9增加了内置的WebSocket服务器支持,通过几行PHP代码就可以写出一个异步非阻塞多进程的WebSocket服务器. 基于swoole websocket的用户上下线通知,在线用户列表,群聊等简易功能的聊天室: 源码前往github : https://github.com/wanggang826/about_swoole/websocket_chat 简易聊天室示例地址:  http://sw.wanggangg.top/websocket_chat 原文地址:http

小程序实现实时聊天IM功能

随着小程序的发展,给公司带来了不错的收益,但是有件比较苦恼的事情是,由于小程序没有即时聊天功能,这给公司的客服带来不少的麻烦,导致沟通没有时效性.通过更智能的企达第三方小程序IM,可以实现更多多维度的操作!1.主动邀请对话当用户进入小程序后,可以自动发出一个对话邀请,用户消息及时提醒客服进行接待,及时了解用户咨询信息,不错过任何一个客户.2.标签管理能力根据用户信息以及沟通中获得的信息,可设置标签对用户进行分组,区分不同类型的客户,以实现精准营销.3.富媒体沟通可群发图文.文本.音频.视频等消息

asp.net 客户邮件群发功能 SendMail 发送静态化html

背景:现在几乎每个企业都要用到邮箱,而在大客户量情况下,为我们的不同等级的客户送上节日关怀,以及把我们的喜讯.新品通知到他们是我们急需解决的问题.效果如图 思路: 1.静态化网页模版,首先考虑需要发送什么,把需要的东西做成小而精美的html静态化页面以待发送时候用到: 2.关于发送问题,点击“发送邮件”弹出群发邮件的框,填写主题.html的服务器所在地址.收件人(多个): 3.群发的实现. 代码C#: /// <summary>/// 发送失败的邮箱地址搜集参数/// </summary