Comments (7)
handler是自己实现的,应该注意一下,又或者ReadPacket()阻塞,go handler()
from link.
是的,如@goghcrow所说,Session.ReadLoop()
其实是一个简便用法,满足大部分顺序处理请求的情况,如果需要并行处理请求,应该调用Session.Read()
自己封装handle过程。
通常我们不会允许单个客户端同时有多个请求被处理,一方面是有安全风险,单个客户端可以发起大量请求让服务器陷入繁忙,另外一方面服务端并行处理单个连接的多个请求也需要比较复杂的程序逻辑来防止出现死锁或脏数据读写等并行计算常见的BUG。
但是凡事没有绝对性,所以才会做了Session.ReadLoop()
之后又提供了Session.Read()
。
from link.
不过目前Session.Read()
的设计有问题,因为内部为了优化性能用了重用的buffer,一个Session被多个goroutine调用时,需要加锁。
加锁不是主要问题,因为要读取完整的包,必然同一次读取只能由一个goroutine完成,所以读单个包的过程加锁是合理的。
不合理的是内部的重用buffer被直接返回,如果外部在复制数据之前就把锁释放了,那么就有可能出现下一个读操作污染buffer的情况。
所以我晚一些会提交一个修改,去掉Session.Read()
的buffer重用,但是Session.ReadLoop()
我还是想保留buffer重用。
from link.
已经提交:commit 0689daf6f1
from link.
Session.ReadLoop() buffer 现在没有重用了?
from link.
设计上应该只有一个 goroutine 负责读 ,一个goroutine负责写
from link.
@nodephp 最初的设计是内部一读一写,但是觉得这样有局限性,如果只是简单的顺序连接和请求处理的场景,多开一个goroutine是浪费,所以把读的goroutine创建交给使用者,需要的人可以自己go session.ReadLoop()
。
from link.
Related Issues (20)
- 请教解码 HOT 2
- session完全与net.Conn脱离关系了,应该继承net.Conn的 HOT 1
- 关于udp的实现 HOT 1
- tcp连接写,是否有必要加锁 HOT 1
- 为啥没有session start的callback? HOT 1
- tcp长链接,一个connection一个goroutine会不会太暴力 HOT 2
- 关于session的close HOT 1
- 问题 HOT 2
- readme文档示例代码没更新
- 当收到一个不合法的数据时,服务器就crash掉了 HOT 2
- Does this version have a benchmark performance test?
- Codec接口为什么要实现Send和Recive呢? HOT 2
- server 端出现疯狂 EOF错误
- Link
- Bitcoin wallet
- 如何获取对端地址 HOT 1
- 觉得项目不错,如果托管出去是不是会让这个项目更活跃。 HOT 2
- goroutine 21498 [IO wait] HOT 1
- net Temporary()函数已被弃用
- Hi HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from link.