现在有既能处理 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 那个?那个有谁用过么?

4482 次点击
所在节点    Java
27 条回复
zoharSoul
2020-05-12 10:10:56 +08:00
netty vertx
dogfeet
2020-05-12 10:14:02 +08:00
akka-stream,前面 gateway 将 tcp,http,websocket 消息统一转换成内部消息。
剩下的就是一致的消息进入到流中统一处理。后期换可以方便的扩展成集群模式。
fkdog
2020-05-12 17:01:46 +08:00
@tctc4869 因为菜就不去实践了。。。?
horsea
2020-05-12 21:04:07 +08:00
@Malthael spring boot + netty 是写到 1 个项目里,还是说 2 个项目。
Malthael
2020-05-12 21:08:15 +08:00
@tctc4869 #17 没碰到过内存的问题,不知道你是怎么部署的。
@horsea #24 一个项目,netty 管理的 tcp 和 websocket 在 springboot 里是定义成服务启动的。
cs419
2020-05-12 23:35:29 +08:00
如果你写多线程 别人提醒你可能有死锁的问题
你想着要不我用多进程吧
那担心是多余的 这说明你都没用上锁 那也就不会出现死锁

用 netty 怕遇上内存泄漏的话
多虑了 你应该还没用上 内存直接访问的 api
你担心内存管理的不好 程序挂掉 那你换个框架 该挂还是挂

服务拆成两个 java 进程就不挂掉 并不能说明就是 netty 的内存处理不当
或许 你一个 java 进程 但 http tcp 各用一个端口 也不会挂掉
yamasa
2020-06-24 16:35:39 +08:00
迷惑行为。我们这儿一个很重要的微服务一直都是 boot+netty 开两个端口,正式上线之后从来没有过内存问题。netty 内存能出问题无非就是直接内存未正确释放这一类呗,我还巴不得我遇到过几次,彻底定位长长见识,以后出去面试还能吹水呢哈哈。

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

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

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

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

© 2021 V2EX