代码 > github.com/googollee/go-socket.io的两个坑
2020-05-26
几年前的项目用过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干嘛……
代码 > flutter初体验
2020-04-01
用flutter做了个小玩意,大概的了解了下。
怎么说呢,感觉乖乖的。
明显不是原生的开发体验,感觉开发体验更接近于phonegap/cordova,但感觉上稍好点。
语气说是一个平台,ui库,不如说更像一个框架,大概是vue/react + bootstrap的感觉。
语法简单,和js很像,开发起来那一套很像前端。
做点小工具不错。
对于flutter最大的期望是能很好的开发桌面端,如果能做到的花可以投入一定的精力。
代码 > dart...还是有点蛋疼啊
2020-03-27
用flutter做了个app,准备了个文字模板,自然想到了用mustcahe。
引用后,发现app起不来了,卡在了“Syncing files to device Android SDK built for x86...”,白屏不继续。
放狗搜了一会,再分段注释,发现是https://pub.dev/packages/mustache 这个库的问题,不支持flutter,需要用https://pub.dev/packages/reflected_mustache这个库
服气的。还没怎么成熟的生态呢,已经开始玩自己不兼容自己了……
代码 > 改代码时留的泪,都是写代码时脑子进的水。
2020-03-13
我是怎么想的,会想到给缓存组件加入一个永不过期的功能,还balabala写了一堆代码来实现?
脑子是进水了么?
是进水了么?
是进水了么?
是进水了么?
代码 > [记录]vue for循环出的输入框无法修改值的解决方法
2020-02-26
之前写了段代码,大概是这样的
<div v-for="(port,index) in Item.Ports"
v-bind:key="index"
>
<el-input v-model="port"></el-input>
发现没渲染出的输入框没法修改值。
想了下,可能是值变化后,port指向的值不再有效或者在父元素里了
找了下文档
https://cn.vuejs.org/v2/guide/list.html
for循环后的作用域可以直接用父作用域的元素,修改下
<div v-for="(port,index) in Item.Ports"
v-bind:key="index"
>
<el-input v-model="Item.Ports[index]"></el-input>
可以起效了。
之前应该处理过这个问题,又遇到了,记录下。
代码 > [自我提醒]笔记本做benchmark记得要插电
2020-02-22
最近重做了缓存组建的部分功能
拿博客程序本地一跑,首页没啥变化,空接口效率跌一半
立马蒙蔽了
没道理啊,Y9000X和平板比都弱这么多。
立刻排除法调代码,调了一会发现,没插电源……
插上去后,首页效率高了1/3....
好吧
记录一下,提醒自己
代码 > 记录:关于golang的atomic load
2019-09-26
之前对于atomic的load的使用场景不是十分清楚。
看到的解释是atomic读的时候所有的写入操作都无法执行,一时没想到场景。
找到这个链接后才有了直观认识
https://stackoverflow.com/questions/55840399/golang-what-is-atomic-read-used-for
数据的操作和写入并不是一个瞬间的动作,不是用Load方法的话可能会造成读出只写入了一般的数据,在数据写入一半的时候读,在极端情况下,理论上是可能产生极大的偏差的。
觉得还是有很多基础要补啊,找时间要补一下。
代码 > element table组建filter过滤值的初始值filtered-value设置
2019-08-19
被坑了一天,升级版本,爬代码,最后还是再一次通过靠搜索到issus的珠丝马迹推测出了解决方案。
文档的说法是 filtered-value 是一个 Table-column Attributes
可实际上这个属性和其他属性不一样,通过 :filtered-value="xxxx" 是没法修改的。
通过 https://github.com/ElemeFE/element/issues/5612 这个issus里可以发现。
要取filtered-value是需要通过ref取得表对象来进行处理的。
所以易证得,设值也需要给table加上ref来设置。
来,大胆尝试
this.$refs.table.columns[0].filteredValue = [this.Watch];
果然起效。
对element ui也真的没脾气。
只能说,好锻炼人的编程能力啊。
代码 > golang接下去两个版本的错误处理感觉很针对痛点
2019-07-03
erros的As/Unwrap明显能很方便的为代码带上错误的环境信息
try能大量的减少if err !=nil {return err}的数量