swoole 客户端和服务端不断通信
2024-08-28 00:08:28
server.php
<?php
class Chat
{
const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问
const PART = 9501;//端口号 private $server = null;//单例存放websocket_server对象 public function __construct()
{
//实例化swoole_websocket_server并存储在我们Chat类中的属性上,达到单例的设计
$this->server = new swoole_websocket_server(self::HOST, self::PART);
//监听连接事件
$this->server->on('open', [$this, 'onOpen']);
//监听接收消息事件
$this->server->on('message', [$this, 'onMessage']);
//监听关闭事件
$this->server->on('close', [$this, 'onClose']);
//设置允许访问静态文件 //开启服务
$this->server->start();
} /**
* 连接成功回调函数
* @param $server
* @param $request
*/
public function onOpen($server, $request)
{
echo $request->fd . '连接了' . PHP_EOL;//打印到我们终端
$server->push($request->fd,"服务端收到你的连接了");
} /**
* 接收到信息的回调函数
* @param $server
* @param $frame
*/
public function onMessage($server, $frame)
{
var_dump("收到客户端消息:".$frame->data);
$server->push($frame->fd, "服务端收到你的消息了".$frame->data);
Swoole\Timer::tick(1000, function() use($server,$frame){
$server->push($frame->fd, "当前时间".date("Y-m-d H:i:s"));
}); } /**
* 断开连接回调函数
* @param $server
* @param $fd
*/
public function onClose($server, $fd)
{
echo $fd . '走了' . PHP_EOL;//打印到我们终端
} } $obj = new Chat();
index.html
<!--ws_client.html-->
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<h1>模拟Web Socket客户端·向服务端投递Task任务</h1>
<script>
var wsUrl = "ws://192.168.40.10:9501";
var webSocket = new WebSocket(wsUrl); //实例化JavaScript连接事件
webSocket.onopen = function(evt){
webSocket.send("我正在模拟向服务端发送消息");
console.log("连接WebSocket成功!");
} //实例化onmessage
webSocket.onmessage = function(evt){
console.log("服务端说:" + evt.data);
} //实例化onclose事件
webSocket.onclose = function(evt){
console.log("Web Socket连接关闭");
} //实例化onerror事件
webSocket.onerror = function(evt,e){
console.log("好像有些错误:" + evt.data);
}
</script>
php server.php
最新文章
- 同步、更新、下载Android Source &; SDK from 国内镜像站(转载)
- ZOJ 3711 Give Me Your Hand
- 【翻译十五】-java并发之固定对象与实例
- safeNet
- sql新增后返回主键
- 源代码版本控制工具TortoiseSVN,AnkhSVN最新版本下载地址
- Mysql主从备份、主主备份
- zabbix安装配置
- session和cookie作用原理,区别
- IIS 应用程序池自动停止
- shareInstance
- Mysql——Navicat 连接MySQL 8.0.11 出现2059错误
- root密码重置、Linux目录结构和远程连接Linux
- Code First
- java.net.UnknownHostException: lc001 未知的网络服务
- Android测试(一)——Apk文件结构以及Android组件介绍
- python3的unittest中使用test suite(测试套件)执行指定测试用例
- SpringBoot从入门到逆天(1)
- 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别
- 小结:双连通分量 &; 强连通分量 &; 割点 &; 割边