Java 有哪些基于应用层通信协议的框架?

2020-06-28 14:57:42 +08:00
 tctc4869

用基于传输层 tcp 协议的 socket 框架(比如 Netty )要简单的通信,要处理粘半包,如果要考虑传输特殊格式的话剧,那么可以用一用原始的 socket 实现。

如果考虑多文件(上传下载),要考虑更多的情况,要编写的代码就更多。那么有哪些基于应用层协议的通信框架么,比如 WebSocket,包括客户端与服务端。关于 websocket 框架,java 有哪些呢,服务端与客户端?

不一定要与 http 服务端程序挂在一个进程里,可能会单独使用。

4086 次点击
所在节点    Java
45 条回复
tctc4869
2020-06-28 16:07:52 +08:00
@xuanbg 如果一个客户端通过服务器中转与另一个客户端通信呢。
Aruforce
2020-06-28 16:28:02 +08:00
netty 好像也有 websocket 相关的 Handler 的吧 比如 WebSocketServerProtocolHandler 这个你看看能不能用?
qwerthhusn
2020-06-28 16:53:55 +08:00
粘半包这种东西,我理解的“包”,应该就是应用调用一次 read API 获取到的数据。可能因为 MTU 等一些问题导致的这个“包”没能对应上应用层的一次“完整数据”,可能需要把一半数据存下来等后续的“包”直到完成请求。我理解 HTTP 慢攻击的原理就是利用“估计只发前半截,后半截拖着不发”

不知道为啥有些大佬听到这种词,就感觉很 low ?!
jworg
2020-06-28 17:05:24 +08:00
@qwerthhusn 最开始的争论是“tcp 的粘包”,这个表述确实有些问题,就像 A 的高速公路堵了( tcp 上的自定义协议粘包)与 A 地堵了( tcp 粘包)。不过不加 tcp 限定,单独的“粘包”(堵车),粘包警察就来了确实想不到。
roundgis
2020-06-28 17:06:37 +08:00
粘半包是什么东西?
tctc4869
2020-06-28 17:09:06 +08:00
@Aruforce 我去看看吧
est
2020-06-28 17:11:44 +08:00
粘半包是什么东西?甜馅的还是咸的?
tctc4869
2020-06-28 17:13:41 +08:00
@roundgis 发一个数据,发送端把发送数据分层两块,接收端那里变成接收一块,叫粘包,发送一个数据,就整块发送,接收方那里却变成两次接收。叫半包

而粘半包,就是发送一个较大的数据,同时发生粘和半包现象,即是多个数据块组合到一起,结尾或头部的数据块缺了。头部或尾部发生了半包现象
biossun
2020-06-28 17:13:42 +08:00
挑选适合你的应用场景的应用层协议,然后去找 java 语言的实现模块即可。
tctc4869
2020-06-28 17:15:27 +08:00
@tctc4869 这只是我简单的说明。
monkeyWie
2020-06-28 17:31:18 +08:00
建议把粘半包描述成应用层协议编解码,这样就应该没人杠了吧🐶
chendy
2020-06-28 17:31:19 +08:00
还好楼主说了个粘包,要不然这帖子应该已经沉了
需要具体场景才能决定用啥,不知道具体场景就 http/ws
tctc4869
2020-06-28 17:32:43 +08:00
@chendy 如果有这种情况,客户端借助服务器中转数据与另一个客户端通信呢,那用什么比较合适,http 通信模型是不行的把。
ychost
2020-06-28 17:42:00 +08:00
简单处理一下,定义一个起始帧,结束帧,和一个 CRC 校验帧,然后数据用 protobuf 进行序列化和反序列化
yannxia
2020-06-28 17:45:53 +08:00
也就是 HTTP 和 GRPC 选一个咯,觉得 HTTP 不好用,就 GRPC 嘛,自己定数据格式都是在作死的边缘疯狂试探。
paoqi2048
2020-06-28 18:09:59 +08:00
别粘了,别粘了,👩👩怕!
xingjue
2020-06-28 18:12:41 +08:00
swoole
vanxy
2020-06-28 18:37:35 +08:00
@qwerthhusn #23 把你提到的名词都 google 一下,花几分钟了解一下。就不会有这些疑问了
vanxy
2020-06-28 18:39:10 +08:00
@tctc4869 #28 这个现象叫做应用层协议设计有漏洞 or 编解码器设计有问题。

不要自造词,把锅甩给无辜的 TCP 啦
labulaka521
2020-06-28 18:44:37 +08:00
别粘了好吗 粘包👮‍♀️马上就到
传输控制协议( TCP,Transmission Control Protocol )是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793[1]定义

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

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

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

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

© 2021 V2EX