![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 60
月下独奏
这个作者很懒,什么都没留下…
展开
-
简易文件系统-用Go语言从零开始设计(四) 文件系统冗余措施 一致性hash算法
一、一致性hash算法一致性Hash介绍 分布式均匀算法--hash性一致算法--hash slot上面是大致介绍,根据自身理解,其只是更随机更均匀的分配。本系统需要同一md5元数据不能分配到同一文件节点中,因此需要对其进行改造。也就是计算元数据key时,会遍历对应key中是否有相同md5值的数据,如果有则寻找下一个key对应的node,直到找到为止。本来一致性Hash能快速根据key获取信息,不用存储Key对应的文件信息,但由于本系统需求,需要存储空间记录信息。Go语言...原创 2021-02-23 18:19:14 · 596 阅读 · 0 评论 -
简易文件系统-用Go语言从零开始设计(三) 文件上传 文件下载 文件删除 文件共享
目录一、文件上传二、文件下载三、文件删除4、文件共享服务之间的通信都是用tcp,定义好数据的结构即可,在其他文章提及过一、文件上传客户端使用QT编写,在上传文件过程中会首先会查询服务器是否有相同md5值文件,有则上传文件的基本数据上传时会预先判断文件的大小,如果大于指定数值则对文件进行分割上传。如果存在相同md5值文件,服务器只需数据库查询对应文件信息将其virtualDataID复制到新文件信息,完成此次文件上传当所有文件块上传完毕后,服务器会合并数据并...原创 2021-02-23 17:52:58 · 572 阅读 · 1 评论 -
简易文件系统-用Go语言从零开始设计(二) 文件目录功能
目录一、文件结构二、查看文件夹三、创建文件夹四、重命名文件夹 删除文件夹一、文件结构文件结构使用多叉树,新建文件夹只是在数据库记录是一个虚拟的概念,新建文件夹则上传数据并记录在数据库中,并让对应的文件夹的子节点放入该文件。在服务器代码中文件夹的结构和多叉树的构建如下:type File struct { FileId string FileMd5 string `json:"Md5" form:"Md5"` F...原创 2021-02-23 17:23:30 · 562 阅读 · 0 评论 -
简易文件系统-用Go语言从零开始设计(一) 总体结构
简易文件系统-用Go语言从零开始设计(一) 总体结构文章目录简易文件系统-用Go语言从零开始设计(一) 总体结构文章目录前言一、总体设计结构二、数据结构1.目标2.结构介绍总结前言闲来无事,帮写一个项目,经过几天的构思编码最终完成。其中有的设计不太合理,敬请见谅。一、总体设计结构 最基本的结构,用户通过服务器来访问数据,实现了文件上传,新建文件夹,删除文件夹,共享文件,下载文件 功能。一开始设想用户可以直接读取...原创 2021-02-23 16:56:46 · 571 阅读 · 0 评论 -
我去图书馆 抢座分析
参考https://blog.csdn.net/RenjiaLu9527/article/details/96843605大致分析了一下抢座流程:首先我去图书馆 使用了微信绑定账号,因此平常的账号登录几乎没用。通过抓包分析,用户需要上传SERVERIDwechatSESS_ID 这两个参数才能进行抢座,并且这两个参数会变动,在抢座前一个小时内最好更新参数。难度+1查看自习室列表选择自习室再进行抢座最后提交座位进行选座。选择座位使用Get 需将自己wechatSE...原创 2020-09-09 14:42:50 · 13223 阅读 · 12 评论 -
简易聊天系统-聊天服务
聊天负责私人聊天,群组聊天。私人聊天接受信息后保存至数据库再转发给目标用户。群组聊天当前没有离线消息保存,也就是用户登录后无法知道多少消息未读,而是直接拉取指定数量群聊天。当有成员发送后会将聊天信息存储数据库(没有缓存进redis,因为在线用户会直接发送,目前没有这个优化必要),从redis中检索所有群组在线用户并通过消息队列发送至对应网关。大致代码如下:// 处理群消息func DealGroupMsg(delivery *amqp.Delivery, transfer1 *transfer)原创 2020-05-14 11:49:47 · 1382 阅读 · 0 评论 -
简易聊天系统-群组服务
群组服务负责群组日常管理,申请进群,创建群,获取群成员,与用户服务类似。基本代码如下:func DealMsg(delivery *amqp.Delivery) { var json = jsoniter.ConfigCompatibleWithStandardLibrary var transfer1 transfer err := json.Unmarshal(delivery.Body, &transfer1) Type := transfer1.Data.Type if原创 2020-05-14 11:40:48 · 254 阅读 · 0 评论 -
大学自习室简易抢座小程序
用户端使用微信小程序,从某个模板扒皮下来。服务端使用GO gin框架。大致结构小程序提交抢座任务,服务器每天定时抢座。1.遇到过座位服务器响应过慢,解决办法就是简化步骤,将耗时的步骤尽量提前进行。2.单个服务器性能有限,解决办法多台服务器同时抢座,并使用消息队列用来分配任务。3.座位服务器有速率限制,超过请求次数则会封号,解决办法:找到临界值调整请求次数。用了半...原创 2019-12-29 14:27:59 · 7053 阅读 · 26 评论 -
微信小程序使用Protobuf
网上大部分小程序使用protobuf的都是微信小游戏的解决方案,弄了半天终于整理出微信小程序使用Protobuf的可行方案。找的方案不是动态解析,而是根据.proto文件生成json文件再手动生成js文件,过程比较复杂。 1. github 项目 https://github.com/Zhang19910325/protoBufferForWechat 这个项目是关键,将其wei...原创 2018-12-19 19:33:33 · 7426 阅读 · 8 评论 -
文本相似度(小说去重)
之前写了爬虫爬取小说,总文件大概70G。但如果换小说网站进行爬取会重复爬取同样的小说,产生不必要的空间浪费。 由于不同网站对小说命名不同,例如:小说名 斗罗大陆.txt,在小说网A命名为斗罗大陆,小说B<斗罗大陆>,小说C 斗罗大陆全集什么的。 如果从小说名来判断会有很多麻烦,并且有的小说网站小说名和小说内容严重不符,因此根据小说名来判断被否决。 随着研究的深入,发现一...原创 2018-10-15 17:19:46 · 3016 阅读 · 5 评论 -
grpc-go,双向流模式中服务器主动关闭stream
在grpc的编码中发现客户端stream流有方法。CloseSend() error客户端如果想主动关闭连接直接调用此方法即可关闭,但是服务端对应的ServerStream没有关闭的方法,最后Google一下发现github grpc 项目中有对应的解答:https://github.com/grpc/grpc-go/issues/444很简单服务端只需要跳出循环即可断开连接,下面贴出我的...原创 2018-08-09 20:39:36 · 10019 阅读 · 4 评论 -
Go 使用Grpc 与 ETCD clientV3 出现 panic: http: multiple registrations for /debug/requests
做项目时使用了Grpc与登陆服务器进行通信,ETCD用来服务的发现。结果刚运行直接崩溃,百思不得其解。经过GOOGLE发现问题所在:https://stackoverflow.com/questions/47938005/panic-http-multiple-registrations-for-debug-requests I found the reason. It's becau...原创 2018-07-26 21:36:46 · 3524 阅读 · 0 评论 -
QT 使用QDataStream时遇到的坑
使用QT与Go服务端进行通信,每个数据包大小都以约定好结构为 len | feature| compress| data 结果使用QDatastream进行添加数据时发现data数据开头有乱码,比如发送12345结果服务端接收为QT 发送代码如下: QByteArray socket_packdata=QString("12345").toLatin1(); bool ...原创 2018-07-20 15:35:16 · 9470 阅读 · 0 评论 -
QT Go TCP数据传输粘包问题
使用Go语言为服务器,QT作为客户端,利用TCP进行数据传输,当两次发送间隔过近会产生粘包现象,此时就需要一个特定的数据格式用来区分两个数据的边界,我使用 特征码(int类型用来区分是否恶意)数据包大小(int)压缩标志(bool)数据(byte),但当交互时发生问题,比如QT的自定义数据格式QBytearry会在最前面加个字段用来表示自身整体大小。下面直接列出代码:GO:func IntToBy...原创 2018-04-27 13:08:11 · 636 阅读 · 0 评论