github.com/googollee/go-socket.io的两个坑

几年前的项目用过socket.io,用了github.com/googollee/go-socket.io这个库起了服务。

最近需要做一点升级,发现了几个蛋疼的坑。

1.BroadcastToRoom反应迟缓

这个好分析,爬了下代码,broadcast的时候是同步的……同步的……同步的……,不是并发的。

万一有连接超时,必须等超时的连接过了timeout才能发下一个……

真有想法。

解决方案:用ForEach方法自己实现一下

func BroadcastToRoom(s *socketio.Server, nsp string, room string, event string, args ...interface{}) {
s.ForEach(nsp, room, func(c socketio.Conn) {
go func() {
c.Emit(event, args)
}()
})
}


2.400错误,提交的信息丢失

这个怕了整个代码,无解。

首先,有错误后不打任何日志,直接返400错误,这个操作略骚

其次,明明每次请求不是异步的,偏要解析payload搞几个chanel搞成异步,然后有pause和resume的状态,判断了pause会报错,这个我也没抓到点。

参考

https://github.com/googollee/go-engine.io/issues/82

解决方案:

检查代码后,websocket没对应的方法……

客户端强制使用websocket....

强制使用websocket我还走一层socket.io干嘛……

发布于
2020-05-26

[记录]关于编程/数学能力和逻辑思维能力的关系

记录下自己部分知乎回答的内容

很多程序员被认为情商低,就是因为思路长期模拟程序,对现实生活产生了偏差,认为世界是二元的,是非黑即白,有特定输入就一定有特定输出的,不然就是出bug的思路。

我认为,这是对认识世界能力的摧残,是缺乏辩证认识和分析社会能力的体现。
而"辩证认识和分析社会能力"是我认为的逻辑思维能力中最重要的一块。
因此,我认为,学习编程对逻辑思维能力有极大的负面作用。

我认为编程也好,数学也好,本质需要的不是逻辑思维能力,而是想象力。  

编程能力和数学的能力是需要一种能构建和想象出不存在于现实世界中的架构的能力。
所以我写代码和做数学是唯二需要用到纸笔的事情。  
通过画一些简略的图,帮助自己更好的在脑海中架构出我需要理解的东西,像脚手架一样为因为我想象力不足而摇摇欲坠的理解进行稳定和支撑。
发布于
2020-05-12

杀戮尖塔-静默猎手过进阶20了

猎手的特色应该是对手牌和费的控制

后期套路很单调

初期一张致命毒药一张毒雾过第一层

然后2张杂技,一张战术大师,保证手牌和费的循环

然后抓住一切机会移除手牌,只拿一些能消耗的强力牌过渡,如炼金药水,死吧死吧死吧,背刺等,以便能活到手牌正循环。

能熬就赢,不能就输。

如果初期没拿到致命毒药,可以拿华丽收场或者终结技作为主要输出技能。

第三层boss只有时间吞噬者有点难度。但我20阶时第二个boss是时间吞噬者,也一次过了……

下一个目标是故障机器人了。

发布于
2020-05-04

又又又被知乎禁言了

看了知乎上提到的朝鲜信息后。

评论了句看到鑫胖妹妹,去查了下吨位。

又是禁言7天,不可申诉。

怎么说呢,没什么好说的。

这帐号早晚要挂。

自己的blog这一亩三分地还是要维护着。

不然我这么喜欢吐槽一个人早晚要被憋死。

发布于
2020-04-24

glusterfs?ceph?

说实话,现在有点过了glusterfs的蜜月期了。

glusterfs看上去很完美。

扩容容易,mount方便,最重要是数据回复容易,就是一块块磁盘,哪怕系统都挂了,直接接电脑上就能把数据恢复了。

但是,有两个致命的问题。

列文件慢。

没有快照。那个基于lvm快照的方案看得我是一脸蒙蔽……

列文件慢除了不能适用大部分场景外。

rsync也慢

而没有快照导致除了rsync没有特别好的备份手段。

两相综合,备份是个大问题。

最后只能用变通的方案,用qcow2之类的快照格式挂虚拟机用。

但一个文件系统这样当块设备用,完全没有意义了。

感觉不如ceph这种原生支持块设备的系统了。更何况rbd的快照也好香的样子……

又有proxmox ve 这样的完整解决方案直接支持。

感觉要数据安全,离不开备份,难以用glusterfs。

可能glusterfs更适合做相对不那么重要的图片/附件库?

拿来放业务数据还是蛋疼的。


发布于
2020-04-17