netty,websocket,ipc(lpc和rpc),Nio之间的相互调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了netty,websocket,ipc(lpc和rpc),Nio之间的相互调用相关的知识,希望对你有一定的参考价值。

参考技术A netty操作的是nio(基于nio)。

nio的作用是线程资源的最大化利用,以此减少开启的线程数量,nio为基于缓冲区的io,nio通过selector来管理多个通道(比如socket),轮询通道,哪个通道不需要数据传输则阻塞,然后连接另一个需要通信的通道。

websocket是socket的跨平台解决方案。

ipc是进程间通信,包含lpc(本地进程间通信)和rpc(远程进程间通信),也称进程调用。进程间通信需要用socket。

总结:ipc可以直接使用socket通信,但不能跨平台,使用了websocket就能跨平台调用,但每个线程只能连接一个socket,通过使用netty就可以一个线程连接多个socket,避免开启大量线程来处理socket。

gateway网关中netty的websocket设置数据内容大小

参考技术A     微服务中用到websocket,如果传输或返回的数据过大则会断开连接或者前端接收不到,在具体使用websocket的微服务中,我们可以用

    session.setMaxTextMessageBufferSize(单位是字节);

或者

    session.setMaxBinaryMessageBufferSize(单位是字节);

来设置数据大小的限制,这样无论是接收数据还是返回数据都能搞定了

    但是当我们要使用gateway来转发websocket请求时就不一样了,gateway是使用netty的,所以websocket也是netty的,当websocket请求到网关的时候,网关会创建WebSocketService来转发你的请求,当具体微服务返回webSocket信息是,网关会创建ReactorNettyWebSocketClient来接收你微服务的返回数据来给客户端返回

    所以网关中webSocket设置数据大小我们要分别设置服务端接收的大小和客户端返回数据大小

@Bean

//如果有多个的WebSocketService注入到spring容器,优先使用这个

@Primary

public WebSocketService customWebSocketService()

ReactorNettyRequestUpgradeStrategy requestUpgradeStrategy =new ReactorNettyRequestUpgradeStrategy();

requestUpgradeStrategy.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);

return new HandshakeWebSocketService(requestUpgradeStrategy);



/**

* 上面的bean是websocket服务端的,负责设置接收数据的大小

* 这个bean是websocket客户端的,负责设置返回数据的大小

* @return

*/

@Bean

@Primary

public ReactorNettyWebSocketClient customReactorNettyWebSocketClient()

ReactorNettyWebSocketClient reactorNettyWebSocketClient =new ReactorNettyWebSocketClient();

reactorNettyWebSocketClient.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);

return reactorNettyWebSocketClient;



    DEFAULT_FRAME_MAX_SIZE自行设置

以上是关于netty,websocket,ipc(lpc和rpc),Nio之间的相互调用的主要内容,如果未能解决你的问题,请参考以下文章

什么是远程过程调用?

怎么用netty搭建一个websocket的java客户端

gateway网关中netty的websocket设置数据内容大小

netty系列之:使用netty搭建websocket服务器

Netty 和 Channels 和 Websockets

通过 WebSocket (BinaryWebSocketFrame) 和 Netty 上传文件