关于 HTTP 服务器实现的小白级别的问题

2021-03-10 16:32:00 +08:00
 fireleaves

我也是一个后端开发,但是做的都是和客户端直接建立长连接的,例如 TCP 或者 Web socket 。所以对 HTTP 的服务端的实现方式有点好奇。

主要问题在于,如果一个 HTTP 请求是需要去数据库取数据的或者耗时较长的,那么服务器怎么异步的处理这个请求呢?还是说不管请求是什么类型的,都同步的处理完,然后再返回?

举个栗子:

客户端发起登录,服务器收到请求需要去数据库中获取玩家数据。

对于长链接,可以在收到客户端请求之后,发起数据库操作,流程就此中止,服务器可以在此时处理其他请求,异步等数据库返回结果,再回调完成登录的后续处理,返回给客户端下行协议。

HTTP 好像不能把请求缓存起来,等待后边数据库触发之后再处理。是可以缓存再处理而我不知道呢?还是大家用 Redis 等查询耗时低的数据库解决呢?

纯小白,还请大家不吝赐教去。

2481 次点击
所在节点    程序员
23 条回复
wangritian
2021-03-11 10:05:52 +08:00
http 本质是一来一回的 tcp 包,访问数据库或其他 IO 操作时一般会切换线程 /转让协程,让服务器同时处理其他请求,拿到 IO 结果再给客户端返回 tcp 包
mmdsun
2021-03-11 12:46:47 +08:00
了解下 SSE(Sever-Sent Event)
muzuiget
2021-03-11 13:50:37 +08:00
HTTP 也可以长时间等待,没说一定要马上返回,一样可以做长时间请求。

说白了你要做到在呈现在用户界面这一层,不要样用户有“卡住”的感觉,服务端和客户端做都行,但是客户端责任更大,毕竟服务器挂掉时,也是相当于一次长时间请求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/760378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX