摘要:gofly最近准备完善对外的js引用功能,类似很多知名客服系统那样直接引入js就可以使用,现在只是简单的实现了下 代码在github,可以在页面上看到, gofly地址在这里 https://gofly.sopans.com/ , 开发和部署方式在github的readme.md 首先要申请js权限 阅读全文
posted @ 2020-08-13 14:23 陶士涵 阅读(10) 评论(0) 推荐(0) 编辑
摘要:当需要实现守护进程 , 以及自己开发的命令自动崩溃重启时,可以使用go版本的supervisord , 比python版本依赖少一些 git clone https://github.com/ochinchina/supervisord.gitenv GOOS=linux GOARCH=amd64 阅读全文
posted @ 2020-08-11 10:18 陶士涵 阅读(13) 评论(0) 推荐(0) 编辑
摘要:在实现客服系统的过程中,需要有新消息的时候标题栏闪烁提示 因为聊天框是被iframe框进去的页面,所以在聊天框中收到websocket消息以后要把消息发送给父集页面,在父页面中闪烁标题 测试页面地址: https://gofly.sopans.com/ 子页面发送到父页面的实现是,在父页面增加消息监 阅读全文
posted @ 2020-07-28 11:08 陶士涵 阅读(34) 评论(0) 推荐(0) 编辑
摘要:当我们使用了websocket技术实现了实时的推送访客来到消息,但是我们只能随时看着页面不离开才能知道有访客来到 现在增加浏览器的通知消息,就可以只要打开着界面,不用一直盯着,干别的事去就可以了,有新消息会从右下角弹出来 测试地址如下,当有访客点击咨询按钮时,客服后台会弹出提示: https://g 阅读全文
posted @ 2020-07-27 15:51 陶士涵 阅读(44) 评论(0) 推荐(0) 编辑
摘要:我的域名是在阿里云万网上购买的,服务器是部署在腾讯云上,可以按照下面的步骤配置https 首先登陆阿里云网站控制台,申请免费证书,免费证书只能单一域名。测试地址如:https://gofly.sopans.com/ 申请稍等几分钟就能通过 把证书下载到本地,然后上传到腾讯云的服务器上,配置nginx 阅读全文
posted @ 2020-07-26 12:19 陶士涵 阅读(33) 评论(0) 推荐(0) 编辑
摘要:如果项目中需要有多语言的展示,类似网站中英文切换,可以使用下面这个方法来实现 主要思路就是,页面html内容展示的时候,不能固定写死在页面上,需要从控制器部分分配过来变量,展示输出这个变量 这个变量的内容来自一个结构体的成员,该结构体在创建实例的时候,可以根据传递参数的不同,实例的成员内容不同 实际 阅读全文
posted @ 2020-07-25 15:33 陶士涵 阅读(57) 评论(0) 推荐(0) 编辑
摘要:各个进程之间是共享 CPU 资源的,在不同的时候进程之间需要切换,让不同的进程可以在 CPU 执行,那么这个一个进程切换到另一个进程运行,称为进程的上下文切换。 进程是由内核管理和调度的,所以进程的切换只能发生在内核态。所以,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了 阅读全文
posted @ 2020-07-09 11:55 陶士涵 阅读(82) 评论(0) 推荐(0) 编辑
摘要:update语句是如何执行 , 如何将执行后的新数据持久化在磁盘中 可以假设两种情境: 1. 假设MySQL在更新之后只更新内存中的数据就返回,然后再某一时刻进行IO将数据页持久化。这样所有操作都是在内存中,可以想象此时的MySQL性能是特别高的。但是,如果在更新完内存又还没有进行持久化的这段时间, 阅读全文
posted @ 2020-07-07 11:45 陶士涵 阅读(24) 评论(0) 推荐(0) 编辑
摘要:转载自鸟哥博客 , 原文地址: https://www.laruence.com/2020/06/27/5963.html PHP8 alpha1已经在昨天发布,相信关于JIT是大家最关心的,它到底怎么用,有什么要注意的,以及性能提升到底咋样? 首先,我们来看一张图: 左图是PHP8之前的Opcac 阅读全文
posted @ 2020-07-02 10:25 陶士涵 阅读(139) 评论(0) 推荐(0) 编辑
摘要:memcache作为key-value的内存缓存数据库 , 使用简单 , 运行稳定 , 在redis之前一直大量使用 , 新浪企邮webmail中也大量使用 共享session 在有多台后端负载服务器的情况下,php默认的文件存储session就不适用了,因为用户在访问的时候会访问到后端不同机器 , 阅读全文
posted @ 2020-07-01 11:12 陶士涵 阅读(22) 评论(0) 推荐(0) 编辑
摘要:基于GO语言实现的web客服即时通讯与客服管理系统。 1.使用gin http框架实现restful风格的API 2.使用jwt-go配合gin中间件实现无状态的jwt登陆认证 3.使用casbin配合gin中间件实现权限控制 4.使用gin以及template包的模板语法进行展示界面 5.使用go 阅读全文
posted @ 2020-06-28 21:42 陶士涵 阅读(140) 评论(0) 推荐(2) 编辑
摘要:php8的jit需要在编译opcache扩展的时候进行手动开启 比如我php8源码目录在此: /home/ubuntu/myphp/php-8.0.0alpha1/ext/opcache 执行 ./configure --enable-opcache-jit --with-php-config=/u 阅读全文
posted @ 2020-06-28 14:51 陶士涵 阅读(73) 评论(0) 推荐(0) 编辑
摘要:上次编译完php8 , 发现opcache扩展没有安装,那么就进入到源码目录下的ext目录执行phpize 比如我解压缩后的源码目录是 /home/ubuntu/myphp/php-8.0.0alpha1/ 进入 /home/ubuntu/myphp/php-8.0.0alpha1/ext/opca 阅读全文
posted @ 2020-06-27 11:21 陶士涵 阅读(96) 评论(0) 推荐(0) 编辑
摘要:在配置php的过程中经常遇到不知道php.ini文件在哪,以及不知道哪一个php.ini在起作用,改动了配置后依然不生效 可以有下面的方法去查找 php -i|grep php.ini strace -e open php -m 在这个命令里去查看php命令打开了哪个php.ini文件,非常的精确 阅读全文
posted @ 2020-06-27 11:17 陶士涵 阅读(117) 评论(0) 推荐(0) 编辑
摘要:nginx配置http块中增加 client_max_body_size 200m; php-fpm的php.ini配置文件中增加: upload_max_filesize = 200M 如果不知道fpm下的php.ini在哪,可以直接grep upload_max_filesize -R /etc 阅读全文
posted @ 2020-06-26 23:12 陶士涵 阅读(44) 评论(0) 推荐(0) 编辑
摘要:(麻烦各位转载请注明出处和地址:陶士涵的菜地 , 谢谢 --2020年6月28日) 所有操作需要在root用户下本机测试案例系统信息:ubuntu安装路径:/usr/local/php8 解压缩: wget https://downloads.php.net/~pollita/php-8.0.0al 阅读全文
posted @ 2020-06-26 20:14 陶士涵 阅读(625) 评论(2) 推荐(1) 编辑
摘要:编译安装php时,如果--enable-mbstring , 开启了mbstring扩展,需要这个正则处理库 centos yum install http://rpms.remirepo.net/enterprise/7/remi/x86_64//oniguruma5-6.9.4-1.el7.re 阅读全文
posted @ 2020-06-26 19:08 陶士涵 阅读(46) 评论(0) 推荐(0) 编辑
摘要:据PHP官网的消息: PHP 8.0.0 Alpha 1可用于测试 2020年6月25日 PHP团队很高兴宣布PHP 8.0.0的第一个测试版本Alpha1。这将启动PHP 8.0的发布周期,其粗略概述在PHP Wiki中进行了指定。 有关PHP 8.0.0 Alpha 1的源代码下载,请访问下载页 阅读全文
posted @ 2020-06-26 12:28 陶士涵 阅读(229) 评论(0) 推荐(0) 编辑
摘要:默认的wireshark是不能监听到127.0.0.1的网络通信的 , 需要安装一个软件就可以了 先安装这个npcap , 他会卸载本地原来的wincap等 , 不需要管. https://nmap.org/npcap/#download 然后重新打开wireshark , 就可以看到下面这个 这个 阅读全文
posted @ 2020-06-24 11:53 陶士涵 阅读(85) 评论(0) 推荐(0) 编辑
摘要:滑动窗口短信发送限流算法 1.有两条规则 基于IP的限制和基于手机号的限制 IP规则: 1分钟限制5 10分钟限制30 1小时限制50 手机号规则: 1分钟限制1 10分钟限制5 1小时限制10 2.滑动窗口就是随着时间的流动 , 进行动态的删减区间内的数据 , 限制时获取区间内的数据 最主要的是用 阅读全文
posted @ 2020-06-23 18:04 陶士涵 阅读(125) 评论(0) 推荐(1) 编辑
摘要:代码的包结构是在GOPATH环境变量目录中新建了bin src pkg三个目录 如果代码放在了github里 , 那么就在src目录下新建的 github.com/用户名/仓库名 这个目录下进行开发工作 gin框架现在已经更新到了1.6.0 , 对于后端开发打造restfull 的API接口 ,非常 阅读全文
posted @ 2020-06-21 12:14 陶士涵 阅读(174) 评论(0) 推荐(0) 编辑
摘要:在文档里有直接渲染一个html的文件 , 但是我的需求是渲染html的字符串 , 因为我的html要打包进二进制 , 不能只是外部文件的形式 engine := gin.Default() //登陆界面 engine.GET("/login",controller.PageLogin) engine 阅读全文
posted @ 2020-06-17 19:40 陶士涵 阅读(122) 评论(0) 推荐(0) 编辑
摘要:当使用golang开发一个网站时 , 一般是需要部署下静态文件的资源 ,go只是提供接口 , 打包完的go二进制文件不包含静态文件资源 但是当做一个小型的应用时还要再部署静态资源显得比较麻烦 , 这个时候可以使用packr这个包来把静态资源直接打包进二进制里 包的github地址是 https:// 阅读全文
posted @ 2020-06-16 20:02 陶士涵 阅读(166) 评论(0) 推荐(0) 编辑
摘要:js中进行测试捕获正则小括号中的子表达式,可以用下面这个捕获组来实现 捕获组的定义:捕获组简单来说就是把正则表达式中用括号匹配的内容,保存到内存中,方便调用。js中每一个括号匹配的内容可以被RegExp对象捕获到(最多匹配九个,可以通过返回一个数组索引来取得所有的括号匹配项.),存储在RegExp. 阅读全文
posted @ 2020-06-16 16:41 陶士涵 阅读(54) 评论(0) 推荐(0) 编辑
摘要:在查看一篇滑动窗口实现的限流算法时 , 代码中使用的redis , 就使用到了这个命令 目的是删除集合中范围以外的元素 但是在看文档的时候,文档中的实例令人不能理解 这里的alpha和omega是啥意思 , 完全看不懂 ,也没有地方解释 ,如果是按名称范围删除 从alpha开始删 ,omega不存在 阅读全文
posted @ 2020-06-11 11:16 陶士涵 阅读(64) 评论(0) 推荐(0) 编辑
摘要:想要获取某个目录下以sess_开头的所有文件 , 如果是linux下可以直接sess* , go标准库中也有同样的函数可以实现 files,_:=filepath.Glob("/sess_*") files就是全部的文件列表 , 直接for range循环就可以了 要对winows和linux分开处 阅读全文
posted @ 2020-06-10 18:58 陶士涵 阅读(93) 评论(0) 推荐(0) 编辑
摘要:在一个聊天的界面中 , 当我们固定了高度 , 并且设置了overflow:auto ,会出现滚动条 , 但是填充数据后 ,滚动条是不会跟着滚,数据隐藏在下面 这个时候需要把这块div的scrollTop设置为它的scrollHeight this.$nextTick(() => { $('.chat 阅读全文
posted @ 2020-06-09 14:17 陶士涵 阅读(93) 评论(0) 推荐(0) 编辑
摘要:在vuejs框架中使用websocket , 可以比较方便的运用到vuejs框架的响应式系统 , 以及一些简单的生命周期函数 var app=new Vue({ el: '#app', data: { server:"ws://127.0.0.1:8080/chat_server", socket: 阅读全文
posted @ 2020-06-08 15:21 陶士涵 阅读(302) 评论(0) 推荐(0) 编辑
摘要:特此声明 此文章测试一下百度搜索排名情况 作为首批“Egret顶级开发者”之一,同时是武汉炫幕网络技术总监,一个以“卖白菜”自居的技术老兵,历经从ASP、FLASH 、H5、 再到PHP等多种技术语言的转型,免费为开发者提供了很多实用干货。每次技术转型的背后都经历了怎样的努力和尝试?分享达人又是怎样 阅读全文
posted @ 2020-06-08 12:04 陶士涵 阅读(43) 评论(0) 推荐(0) 编辑
摘要:简单地说,当开启session_start以后,这个session会一直开启,并且被一个用户使用。其他用户开启session的话要等待第一个session用户关闭以后才可以开启session,这样就造成了session阻塞。而session_write_close()可以解决这个session阻塞机 阅读全文
posted @ 2020-06-04 10:25 陶士涵 阅读(67) 评论(0) 推荐(0) 编辑
摘要:当使用curl传递post数据时 , 数据的字段如果是个数组,就会报错Array to string conversion 在调用curl_setopt_array($curl, $options); 调用curl_setopt($ch, CURLOPT_POSTFIELDS, $data) 这两处 阅读全文
posted @ 2020-06-04 10:15 陶士涵 阅读(81) 评论(0) 推荐(0) 编辑
摘要:当使用elementui下的布局进行分栏时 , 加了间隔 ,看到样式里是使用的padding来进行的左右间隔 当把背景颜色加在col上时 ,就会问题 ,需要在col里面再建一层div,在这个div上进行加背景颜色和加内部的间距 不要在col上加 样式 <el-row :gutter="5"> <el 阅读全文
posted @ 2020-06-02 22:31 陶士涵 阅读(163) 评论(0) 推荐(0) 编辑
摘要:go语言中的零值是变量没有做初始化时系统默认设置的值 var b bool // bool型零值是falsevar s string // string的零值是"" 以下六种类型零值常量都是nilvar a *intvar a []intvar a map[string] intvar a chan 阅读全文
posted @ 2020-06-02 12:59 陶士涵 阅读(68) 评论(0) 推荐(0) 编辑
摘要:在一个http服务中 , 如果要定义一些参数比如读超时时间 , 写超时时间 , 那么用最简单的http.ListenAndServe 就不能实现了 需要自己实例化http.Server结构体 ,实例化完成以后 , 之前的路由怎么加进去又是一个问题 http.Server中处理请求响应是通过属性里的H 阅读全文
posted @ 2020-05-31 15:57 陶士涵 阅读(55) 评论(0) 推荐(0) 编辑
摘要:在页面上有一个时间插件 , 默认是没有绑定初始时间的 , 当需要绑定初始时候时 , 只能给它赋值当前日期的Date对象 但是在调用接口的时候 , 要求传递的是一个指定格式的字符串 , 需要把Date对象转成时间字符串 , 这个时候就需要判断类型了 typeof 一般只能返回如下几个结果:"numbe 阅读全文
posted @ 2020-05-29 17:53 陶士涵 阅读(64) 评论(0) 推荐(0) 编辑
摘要:把一个Date对象的js日期 , 格式化为比如20200529形式 , 可以参考这个函数 //格式化时间 formateTime(t){ if(t instanceof Date){ let year = t.getFullYear(); let month = t.getMonth()+1; mo 阅读全文
posted @ 2020-05-29 16:39 陶士涵 阅读(154) 评论(0) 推荐(0) 编辑
摘要:在展示大量文本的时候,很多网站会在页面上出现一个展开全文的文字按钮 , 点击这个按钮才会展开全部内容 . 使用jquery比较容易实现 , 最开始我想直接根据vuejs的语法来实现效果 , 结果失败 , 还是jq做起来简单 思路是 , 获取当前文本的div高度 ,超过一定高度就增加一个class值 阅读全文
posted @ 2020-05-29 14:27 陶士涵 阅读(309) 评论(0) 推荐(0) 编辑
摘要:当在一个循环里面 , 展示了一堆按钮 , 点击按钮时当前的按钮处于选中状态 . 比如在elementui下的这个地方 , 并且还有一个折叠展开效果 代码: <el-collapse> <el-collapse-item name="1"> <template slot="title"> <el-ta 阅读全文
posted @ 2020-05-28 19:23 陶士涵 阅读(116) 评论(0) 推荐(0) 编辑
摘要:发邮件功能可以调用比如: qq 163 新浪的邮箱进行发送 , 使用go-smtp这个类库来发送比较简单 , 例如下面的例子: package tools import ( "github.com/emersion/go-sasl" "github.com/emersion/go-smtp" "st 阅读全文
posted @ 2020-05-26 19:49 陶士涵 阅读(65) 评论(0) 推荐(0) 编辑
摘要:如果解析json时 , 把json解析到map[string]interface , 那值所对应的真正类型是下面这样的 bool, for JSON booleans float64, for JSON numbers string, for JSON strings []interface{}, 阅读全文
posted @ 2020-05-25 19:28 陶士涵 阅读(227) 评论(0) 推荐(0) 编辑
Chat Icon three small dots to indicate that an agent is available to chat
点击在线交流 Chat with me