写在前面:本博文内容取自 http://www.php.cn/course/658.html 课程内容,课程讲的不深,但作为swoole入门教程是肯定够了,感兴趣的同学可以去学习一下

博主最近开始学习swoole,闲来没事就想与大家分享一下这个用swoole+websocket实现的简单聊天室demo
开发环境:
Centos 7,PHP 版本7.0.32
前端index.html页面:

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title id="myTitle">IM</title>
</head>
<style>
body {background-color:green;
}
#myname {width:120px;height:30px;
}
.setUserName {width:80px;height:30px;
}
#msg{margin:80px 300px;width:450px;height:200px;background-color:white;
}
.show_send{margin:0px 300px;
}
#text{width:200px;height:50px;
}
.send_button{width:80px;height:30px;
}
</style>
<body><h1>swoole-websocket 及时通讯demo</h1><!--发送信息--><div id="send_msg" class="main box-shadow" style="display:none;"><div id="msg"></div><div class="show_send"><input type="text" id="text"><input class="send_button" value="发送数据" type="submit" onclick="send_message()"></div></div><!--设置昵称--><div id="setName" class="box-shadow" style="display:block;margin:200px 150px 200px 550px;"><input type="text" id="myname"/><input type="submit" class="setUserName" value="设置昵称" onclick="send_name()"></div>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
var msg = document.getElementById("msg");
var wsServer = 'ws://192.168.8.131:9502';
var websocket = new WebSocket(wsServer);
websocket.onopen = function(evt){// msg.innerHTML = websocket.readyState;/*connecting 0 open 1closing 2closed 3*/
}
websocket.onmessage = function(evt){msg.innerHTML += evt.data+'<br />';console.log('从服务器获取到的数据:'+ evt.data);
}
websocket.onclose = function(evt){console.log("服务器拒绝");
}
websocket.onerror = function(evt,e){console.log('错误:'+evt.data);
}
function send_message(){var text = document.getElementById('text').value;document.getElementById('text').value = '';websocket.send(text);
}
function send_name(){var text = document.getElementById('myname').value;websocket.send("#name#"+text);var myTitle = document.getElementById("myTitle");myTitle.innerHTML = "IM" +text;alert("设置成功");var setName = document.getElementById("setName");setName.style.display = "none";var send_msg = document.getElementById("send_msg");send_msg.style.display = "block";
}
</script>
</html>

服务端index.php代码:

<?php
//服务器代码
//创建websocket 服务器
$ws = new swoole_websocket_server("0.0.0.0",9502);
// open
$ws->on('open',function($ws,$request){echo "新用户 $request->fd 加入。\n";$GLOBALS['fd'][$request->fd]['id'] = $request->fd;//设置用户id$GLOBALS['fd'][$request->fd]['name'] = '匿名用户';//设置用户名});
//message
$ws->on('message',function($ws,$request){$msg = $GLOBALS['fd'][$request->fd]['name'].":".$request->data."\n";if(strstr($request->data,"#name#")){//用户设置昵称$GLOBALS['fd'][$request->fd]['name'] = str_replace("#name#",'',$request->data);}else{//进行用户信息发送//发送每一个客户端foreach($GLOBALS['fd'] as $i){$ws->push($i['id'],$msg);}}
});
//close
$ws->on('close',function($ws,$request){echo "客户端-{$request} 断开连接\n";unset($GLOBALS['fd'][$request]);//清楚连接仓库
});
$ws->start();

运行程序:

浏览器输入页面所在地址即可进行测试:

用swoole实现简单IM聊天室demo相关推荐

  1. swoole+redis(websocket聊天室demo)

    websocket是不同于http的另外一种网络通信协议,能够进行双向通信,基于此,可开发出各种实时通信产品,我简单做了个聊天室demo,顺便分享一下. PHP的swoole扩展,正如作者所说,是PH ...

  2. vue php聊天室,Laravel + Swoole 打造IM简易聊天室

    Laravel + Swoole 打造IM简易聊天室 最近在学习Swoole,利用Swoole扩展让PHP生动了不少,本篇就来Swoole开发一款简易的IM聊天室 应用场景:实现简单的即时消息聊天室. ...

  3. ICE专题:实现简单的聊天室(一)

    目标:实现一个简单的聊天室.本文实现的聊天室仅出于演示ICE的多播功能,即由一个Client发送的消息,广播至注册的其他Client上.以后的系列文章,将逐步完善这个例子,使其成为一个现实意义上可用的 ...

  4. java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些java方面的技术应用. 今天没什么事做,基于udp协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对java网络编程方面的一个简单回忆. ...

  5. Application对象 简单的聊天室

    使用Application对象可以使得多个用户在访问同一个asp.net应用程序时,能够共享信息,在多个用户同时访问asp.net时,都会产生一个Application对象.通常可以把共享的数据变量存 ...

  6. 可以发送图片文件的php聊天室,基于 Swoole 开发实时在线聊天室(十四):发送图片消息...

    基于 Swoole 开发实时在线聊天室(十四):发送图片消息 由 学院君 创建于1年前, 最后更新于 1年前 版本号 #1 2055 views 0 likes 0 collects 上篇教程我们演示 ...

  7. java 简单的聊天室_Java简单聊天室

    实现Java简单的聊天室 所用主要知识:多线程+网络编程 效果如下图 /** * * @author Administrator * *简单的多人聊天系统--重点:同时性,异步性 *1.客户端:发送消 ...

  8. 【技术】uniapp之聊天室 demo

    [技术] uniapp 之 聊天室 demo 效果 代码 <template><view><view class="content" @touchst ...

  9. SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室

    SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...

最新文章

  1. tensorflow 运行报错 runtime error use a closed session
  2. UVA 11578 - Situp Benches(dp)
  3. Spring-AOP @AspectJ切点函数之@annotation()
  4. kinana 清空索引数据_(Elasticsearch)实战Elasticseartch、Logstash、Kibana
  5. 【ARM】一步一步移植Linux Kernel 2.6.13到板子
  6. IE的2像素偏差问题终于“将要”成为历史了(附js微技巧一则)
  7. Vmware安装Centos7上网问题的解决
  8. [今日白学]组件的基础的基础的基础
  9. 我摸鱼写的Java片段意外称霸Stack Overflow十年、征服6000多GitHub开源项目: 有bug!...
  10. Oracle→表、表字段数据类型、表DDL语句、数据DML语句、约束、case...when、decode
  11. [No000083]文件与文件夹操作
  12. java中的汇编指令_查看Java的汇编指令
  13. JDK1.8新特性(八):还在重复写空指针检查代码?赶紧使用Optional吧!
  14. usermod -a -G group user修改user用户信息,把user添加到组group中
  15. 线性回归的基本概念以及正规方程
  16. SSL/TLS协议详解(中)——证书颁发机构
  17. linux连接oracle的日志,linux shell脚本连接oracle查询数据插入文件和日志文件中
  18. [职场技巧第一期]面试前需弄明白的四个问题
  19. 计算机专业班级工作计划,网络计算机班班主任工作计划
  20. pci数据捕获和信号处理控制器的驱动安装解决方法(联想T410i隐藏分区故障引起的一系列问题)

热门文章

  1. 微信公纵平台基本配置php_php微信公众平台开发(一) 配置接口
  2. 《Blockchained On-Device Federated Learning》精读
  3. Jweb-Servlet 知识点+代码实操
  4. 利用HTML5新特性实现拖拽交换表格单元格元素
  5. 浅谈 Android 的安全启动和完整性保护
  6. 电池pack结构_一种锂电池PACK组装结构的制作方法
  7. 算法 洗扑克牌(乱数排列)
  8. Kubernetes(1)
  9. cargo build failed: SSL connect error (schannel: failed to receive handshake, SSL/TLS connection fai
  10. 【解救ROS】clion2022.2.2的安装永久使用教程