shitingbao
shitingbao
注意:理论上con.Read和ioutil.ReadAll都是可以读取,但是ioutil.ReadAll要收到error或者EOF才会返回,也就是说如果发送端,发送数据后,调用 Close 关闭连接,不等待服务端的返回数据,服务端可 以用 ioutil.ReadAll 来读取数据,这时可以判断出 EOF,读取结束。但如果客户端发送数据 后,没有关闭,而是等待服务端的数据返回,用 ReadAll 是不行的,你们长连接交互的话,就用read。
我看了您的代码,其中有一点不同意见。比如原来 put 在无数据的时候会让出,“ posNext == putID && getID == putID ” 条件的 else 中的 runtime.Gosched() ,而您修改成在一定程度上等待后,进行抛弃一条旧数据。看起来是缓和了协程的等待,但是获取锁和写入操作是两部分,您自己也说了“// 存线程的竞争过多,而队列cap过小,前面的如果写数据动作比较慢,而后来的进程已经lock到这个位置的下一轮了”,用get 抛弃一条,这里,两次put写入和get 并不能保证原子性,因为获取锁后,if 判断和下一句赋值语句之间,可以有其他put或者get操作,而原来的直接让出时间片不会有这个问题。如果我有误解的地方,请给予指正,谢谢
example,I add some code ``` if ^v == 0 { v-- // the v type is uint32 } else { v++ } ```
I try `BroadcastWithAck` function ,get "operation has timed out", ``` io.To(socket.Room(da["room"].(string))).Timeout(1000*time.Millisecond).Emit("test", da["message"], func(msg []any, err error) {log.Println(msg, err)}) ``` this is my code `https://github.com/shitingbao/socket.io_go/blob/main/example/adapter.go` and I tried to implement this...
@dotX12 @minbala I added a basic library to implement basic functions. You can try to use it first and improve it yourself, saving some repetitive work.in this https://github.com/shitingbao/socketio-go-redis-adapter