现在有既能处理 http 服务又能处理 tcp 服务的成熟框架么?

2020-05-11 17:54:50 +08:00
 tctc4869

一个项目有 http 服务和底层的 tcp 服务,想过用 spring boot 启动后异步启动 netty,但是有人建议一个进程最好不要挂两个服务端程序。如果技术菜,netty 内存管理处理不好,就容易死掉。

那有没有一个封装好的网络服务框架,既能处理 http 服务,又能处理 tcp 服务处理,处理策略像 netty 可以设置两个 handler,一个无法处理,可以交给下一个处理。如果侦测到是 http 请求就交给 http 处理,如果不是,就交给底层的 tcp 处理器处理

当然解决方式,除了把 http 和 tcp 处理挂在一个程序,还有一个方式,把一个进程服务拆分两个进程服务。但这种要面临进程服务管理上的问题

netty 自带 HttpObjectAggregator,我没用过,有用过的么,加了这个,如果还得要添加自定义 tcp 处理的话,会有什么问题么,除了 netty,还有其他的方式么?比如 vert.x 那个?那个有谁用过么?

4456 次点击
所在节点    Java
27 条回复
wysnylc
2020-05-11 18:25:55 +08:00
socket 吧
diggzhang
2020-05-11 18:34:39 +08:00
akka-http?
est
2020-05-11 18:35:48 +08:00
没有。
catror
2020-05-11 19:01:37 +08:00
用 websocket 不就好了?
tctc4869
2020-05-11 19:19:51 +08:00
@catror websocket,websocket 能处理非电脑平板手机的客户端交互么呢?比如客户端是单片机,这种情况呢?
heiybb
2020-05-11 19:25:11 +08:00
donyee
2020-05-11 19:37:28 +08:00
你这是同一个端口处理请求的吗? vertx 封装了 http tcp 模块的,http 部分比较好用,tcp 部分未使用过
sagaxu
2020-05-11 20:20:33 +08:00
vertx 了解一下,常见协议都支持了,还能用 kotlin 协程
Kakajing
2020-05-11 20:29:45 +08:00
Netty——One framework master all Framework
guixiexiezou
2020-05-11 21:20:21 +08:00
我猜楼主估计是想同时监听 tcp,同时又想要的 http 回调吧。一般 java 游戏服务端的操作是:用 netty 处理普通 tcp,嵌入一个 tomcat 或者 jetty ( sparkjava 是最简单了的方式了)处理 http...既简单又高效
catror
2020-05-11 23:50:50 +08:00
@tctc4869 可以,websocket 哪都能用。看你项目原始需求是啥,如果只是需要一条长链接数据通道,我觉得用 websocket 是最简单的。
horsea
2020-05-12 00:41:16 +08:00
我也有这个疑问,有请游戏开发行业的人解答下,游戏 websocket 用 netty,http 用什么框架集成呢?
luozic
2020-05-12 01:15:13 +08:00
vertx 底层就是 netty,不少 Java 框架都是用 netty 做底层,按你的需求,找个支持得框架去抄代码。
Malthael
2020-05-12 08:06:16 +08:00
我用的就是 spring boot + netty 处理 http 、tcp 、websocket 啥的,挺好的啊。
ffLoveJava
2020-05-12 08:27:05 +08:00
@Malthael 请问只用 netty 一个端口就能都相应 http 、tcp 、websocket 吗? 不用再用 tomcat 吗
Malthael
2020-05-12 08:30:55 +08:00
@ffLoveJava #15 不能,我都是分端口处理的
tctc4869
2020-05-12 08:48:19 +08:00
@Malthael 我害怕的是我 netty 内存管理技术菜,导致内存管理处理不好,致使 http 或 tcp 服务死掉,因为我遇到过,不过不是 tomcat+netty,而是 undertow+netty 做一个服务端信息中转站,有几次出现进程服务不能正常使用,只能关闭重启再来,后来把 undertow 的 http 服务和 netty 服务拆成两个进程服务,挂了很多天这个问题就没有了。
zyxcompany
2020-05-12 08:57:47 +08:00
frp
enrio
2020-05-12 09:09:43 +08:00
@tctc4869 websocket 也是可以的。不要把它想得就一定要在浏览器上跑,它归根到底也只是一个应用层协议。我就用过 Java 的 websocket 客户端。
javapythongo
2020-05-12 10:09:09 +08:00
sprongboot + netty

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

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

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

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

© 2021 V2EX