Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

关于 jetty 和 thrift 一起使用时,到底会怎样使用nio?

我的服务使用 spring 作为框架开发,然后部署在 jetty 上运行的,我知道 jetty 内部使用 nio 处理请求,但是我的服务除了支持 http,还支持很多 thrift 接口,thrift 服务自己也有 nio 的处理方式,这些综合起来我有些混乱了,想请教下我理解的这些关于 io 处理的内容是否正确。

  1. 我的服务器在接收 http 请求的时候,使用 jetty 的 nio 来处理链接请求( jetty 的默认处理模型,tomcat 现在也是这样的)。
  2. 我的服务器在发送 http 请求的时候,主要看我使用了什么 http 客户端,如果我使用了普通的 http 客户端就是普通 Bio 的,如果使用了类似 netty 的框架来调用,则就是用 netty 的 nio 实现的处理请求链接,与 jetty 无关.
  3. 如果我的服务作为服务端接收 thrift 请求的时候,就看我的 Thrift Servcive 实现是阻塞的多线程服务模型(TThreadPoolServer),还是非阻塞式服务器(TNonBlockingServer),与 jetty 无关。
  4. 如果我的服务作为客户端发送 thrift 请求的时候,就看我的 thrift 客户端是阻塞式的还是非阻塞实现,与 jetty 无关。

还有理论上我可以仅用 thrift 来进行序列化和反序列化,但是 tcp 通信层完全使用 netty 来完成 IO 的交互?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

关于 jetty 和 thrift 一起使用时,到底会怎样使用nio?

这两个工作在不同的端口,并没有什么关系。

TCP/IP

服务器 server 与 客户端 client 通讯是通过 TCP/IP 协议,即 IP,PORT, 端口。
比如你启动了 8080端口的 Spring boot,然后firefox 访问首页,则可以尝试 netstat -tnap | grep 8000 查看 8000 端口的连接情况。

?  ~ netstat -tulnap | grep 8000 
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::8000                 :::*                    LISTEN      21297/java          
tcp6       0      0 ::1:8000                ::1:46366               ESTABLISHED 21297/java                 
tcp6       0      0 ::1:46366               ::1:8000                ESTABLISHED 12125/firefox       
  • 第一条表明 java 进程21297监听了 8080端口。

可以进一步 ps -q 21297 -efa > /tmp/a && cat /tmp/a 查看实际运行的程序,比如;
image.png
你可以看到是我的 Spring boot

  • 第二条表示 Spring boot 服务器 与 浏览器 firefox 建立的 连接。
  • 第三条表示 浏览器 firefox 与Spring boot 服务器 建立的 连接。

补充

  • nio,一般指服务器 server 采用的IO模型是多路复用IO模型,跟客户端 client没有关系。
  • netty, jetty 都是 应用服务器。

    • 不同的是 jetty 接受的是 HTTP 协议的请求,服务于指定的端口,是 HTTP 应用服务器。
    • 而 netty 接受的是 TCP 协议的请求,服务于指定的端口,是 TCP 应用服务器。
  • thrift 是 rpc 框架,同时也是 TCP 应用服务器。

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...