nuomiphp
正在加载…
请使用更现代的浏览器并启用 JavaScript 以获得最佳浏览体验。
加载论坛时出错,请强制刷新页面重试。
有对 nginx 熟悉的老哥吗?请教一下 nginx 代理 tcp 的一个问题?
cnoder
想复杂一点可以用 openresty 这样的,自己实现一下
liuguangxuan
cnoder
victorc
killva4624
看到了 3 位老哥都推荐了 openrestry ,刚查了一下资料,openrestry 是 nginx+lua ,我用 lua 控制我想要实现的逻辑,是这样的吗?
victorc
nginx+lua 就是干这个的,不建议直接修改 nginx 的 c 代码,可维护性太差了
去翻 openrestry 的文档吧,能解决
jiangzm
地图服务应该下发一个更新包链接(文件服务或者 OSS 存储),给客户端下载下来。
wzy44944
文件小的话 nginx 自己就有个内存缓存,一般十几 KB 的数据可以用,再多会有些性能和功能上的问题,文件比较多或者比较大就需要 nginx+缓存软件比如 ATS ,squid 。是否需要 cache 这个在 http 交互里有标准的,比如请求头里的 no-cache,响应头里的过期时间
seers
起一个 mem 数据库,ng 从里面拿数据
killva4624
liuguangxuan
如果是 HTTP 这种高层协议是有缓存的,自己包 TCP 方法的话可能就像楼上老哥推荐的,走 openrestry 自己实现缓存协议,或者把重的下载数据逻辑放到另外的存储层去下载。
leafre
在 nginx 中缓存不如在服务端缓存,nginx 和服务端同个内网,哪来的大开销
lambdaq
为什么人们不基于 tcp 直接做浏览器,而是要搞个 http 。。就是为了解决 LZ 这问题的。。http 特点之一就是为了方便中间盒子来缓存。。。。
ttvast
lambdaq
真是让人觉得奇怪,下载数据不用 http 还要用自己的 tcp
iphoneXr
我的做法一般都是 负载均衡做 4 层代理转发 Nginx 做 7 层代理转发和静态文件
其他下载类的尽量用 OSS 便宜且稳定
iphoneXr
还没有写完 提前提交了
缓存类走 CDN 主要是流量便宜的多
julyclyde
ttvast
自己山寨个协议,是很多公司内卷的选择要不然咋评职称啊
gstqc
nginx 的 stream 模块不识别 TCP 协议的上一层协议
所以无法对数据进行缓存
如果要实现缓存,你得在 nginx 里写个模块,识别你的协议,然后才能解包出原数据并对数据进行缓存
搞这么麻烦不如换 HTTP 算了
rrfeng
1. TCP 是数据流,不存在『缓存』这种东西,你没法缓存一个『数据流』
2. 所以要做的是把『数据流』变为『数据块』,有边界的数据就能够缓存了
3. 那么在 TCP 里自己切分一下数据,做一个『自定义协议』来实现『数据块』
4. 所以为什么不用 HTTP ?
pjntt
这样做让 nginx 完成的事情就很多了,比如用户鉴权。或者你可以想想在应用服务端上做这个缓存处理。代理就只做代理工作就好。
lambdaq
lambdaq
估计有可能是 minecraft 一类的游戏服。。。
xyjincan
这是服务器下载地图,发送地图都使用公网带宽是吗,开发一个地图客户端代理服务,地图数据缓存在硬盘上吧
villivateur
TCP 本身不能缓存,你得要一个更高层次的应用层服务。
然后,既然用到应用层服务了,为什么不直接用 HTTP ?
DefoliationM
自己写个 tcp 转发吧,不复杂
liuguangxuan
DefoliationM
tcp 转发之前写过一套,现在想把它和 nginx 统一到一起,这样就能统一 http 和 tcp 的入口。所以才有了我上面的提问。
xuanbg
TCP 要什么代理?哦哦,你是想在代理服务器上缓存数据来加速访问。可 TCP 是流,这可怎么缓存?再说,没有应用层协议分包,你这边怎么知道数据读完了?这不就那个啥,“粘包”了吗?
你这必须要自己造个协议来传数据才行。既然是自己造的协议,那就要在 nginx 上加载一个识别这个协议的模块。既然模块都加载了,你想干点什么还不是你自己说了算?
liuguangxuan
xuanbg
老哥,原有的地图服务是自定义协议和客户端进行传输的,传输 tcp 数据流,所以造协议这块儿已经有了,缺的是您说的这个模块,如何加在 nginx 上?
下一页 »