workerman安装与配置
2020-09-07 11:15
573 查看
- 先安装fastadmin框架,为了使用composer ,不使用也可以
- 宝塔里,解除全部禁用函数
- linux上检测环境 curl -Ss http://www.workerman.net/check.php | php
- 安装 composer require workerman/workerman
- 启动命令
php start.php start
php start.php start -d
php start.php stop
php start.php restart - 端口 9510推送 9511text
- 在根目录编写服务端
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/9/8 * Time: 8:38 */ use Workerman\Worker; use Workerman\Lib\Timer; use think\Db; require_once __DIR__ . '/vendor/workerman/workerman/Autoloader.php'; class Yaoguisocket{ public $worker; public function init(){ define('HEARTBEAT_TIME', 60); // 实例化 Worker 类对象 $worker = new Worker('websocket://0.0.0.0:9510'); $arr_updateok=array(); // 设置进程数3 $worker->count = 4; // 服务端进程启动后设置10秒定时器,定时遍历关3闭心跳超时1的66 $worker->onWorkerStart = function($worker) { //创建内部协议 // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符 $inner_text_worker = new Worker('text://0.0.0.0:9511'); $inner_text_worker->onMessage = function($connection, $datajson) { // $data数组格式,里面有uid,表示向那个uid的页面推送数据 $arrdata = json_decode($datajson, true); $ret=self::push_all($arrdata['msg']); // 返回推送结果 $connection->send($ret ? $arrdata['msg'].'ok' : 'fail'); }; // ## 执行监听 ## $inner_text_worker->listen(); //创建心跳定时器 Timer::add(20, function()use($worker){ $time_now = time(); foreach($worker->connections as $connection) { // lastMessageTime设置为当前时间 if (empty($connection->lastMessageTime)) { $connection->lastMessageTime = $time_now; continue; } // 客户端已经下线 if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) { $connection->close(); } } }); }; // 设置回调函数 // 绑定连接的回调函数,这个函数会在有客户端连接时调用 // 参数:TcpConnection 类的对象,代表每个客户端 $worker->onConnect = function( $connection ) { // 向这个客户端发数据 $connection->send('欢迎您3~'); }; // 接收消息 $worker->onMessage = function($connection, $data) { $connection->lastMessageTime = time(); //如果不是心跳就返回数据 if ($data=='heart'){ $connection->send('this heart'); }else{ $connection->send($data); } }; return $worker; } public function __construct() { $this->worker=self::init(); $this->worker->runAll(); } public function push_all($msg){ foreach($this->worker->connections as $c) { $c->send($msg); return true; } return false; } } $ws=new Yaoguisocket();
在后端编写调用代码
public function pushall(){ // 建立socket连接到内部推送端口 $client = stream_socket_client('tcp://127.0.0.1:9511', $errno, $errmsg, 1); // 推送的数据,包含uid字段,表示是给这个uid推送 $data = array('msg'=>'update|1.2.1'); // 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符 fwrite($client, json_encode($data)."\n"); // 读取推送结果 echo fread($client, 8192); }
在前端编写js代码
<!DOCTYPE html> <html> <head> <title>HTML5</title> <meta charset="utf-8" /> </head> <body> <h1>WebSocket示例</h1> <button>打开连接</button> <button>发送数据</button> <button>关闭连接</button> <p id="msg"></p> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"> </script> <script> function getdate(){ var date=new Date(); var year=date.getFullYear(); var month=date.getMonth()+1; var day=date.getDate(); var hh=date.getHours(); var mm=date.getMinutes(); var ss=date.getSeconds(); return year+"年"+month+"月"+day+"日"+hh+":"+mm+":"+ss; } $(function() { var socket; $("button:eq(0)").click(function () { /* 连接 */ socket = new WebSocket("ws://124.156.135.71:9510"); /* 绑定事件 */ socket.onopen = function() { $("#msg").html("连接成功..."); setInterval(function () { socket.send('heart') }, 10000) }; socket.onmessage = function(e) { $("#msg").html($("#msg").html() + "<br />收到数据:" + e.data+' '+getdate()); }; socket.onclose = function() { $("#msg").html($("#msg").html() + "<br />关闭连接..."+' '+getdate()); }; }); /* 发送数据事件 */ $("button:eq(1)").click(function() { socket.send("hsfsdfdfsf9i"); }); /* 断开连接 */ $("button:eq(2)").click(function() { socket.close(); }); }); </script> </body> </html>
相关文章推荐
- ZooKeeper的安装、配置、启动和使用(一)——单机模式
- lnmp安装配置
- MPICH2安装、配置总结和问题
- win7下安装配置tomcat,java运行环境
- canal安装配置与mysql操作监听,我已经帮你踩过了所有的坑
- ubuntu下SVN服务器安装配置
- nginx(二) nginx编译安装 及 配置WEB服务
- Apache 在windows下的安装与配置图解(最新版)
- php-5.5.30与apache-2.4.18的安装配置
- UbuntuKylin13.10下安装配置Theano
- ubuntu12下安装配置sdk,adt的android开发环境
- Android NDK 安装配置指南
- 整理MySQL安装配置修改流程
- sublime text3 安装配置
- solr 7.0 tomcat 安装配置 + 中文分词
- Linux软件安装管理:挂载本地iso光盘镜像、配置yum软件仓库
- OpenStack安装及监控配置视频教程
- Nginx安装及其配置
- [linux weblogic] weblogic的安装及配置
- RabbitMQ介绍,安装以及配置