快速搭建spring+netty+websocket实现消息

srpc-parent

快速基于spring容器管理的rpc服务

支持tcp,websocket协议

一、背景

在开发过程中,为实现服务端,客户端调用方式,简化web调用流程,快速完成第三方接口对接。整理了基于netty集成rpc方案的集成,为了提供消息推送,服务监控提供了websocket协议的实现。

二、 Rpc服务框架组成:

客户端(Client):服务调用方。

客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。

服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。

服务端(Server):服务的真正提供者。

Network Service:底层传输,可以是TCP或HTTP。

三、环境支持

1
2
3
4
5
复制代码netty 4.1.8
spring 4.0+
kryo 4.0.2
gson 2.8.5
hessian 4.0.62

四、Rpc流程序列图:

image

五、Websocke序列图:

image

六、使用说明:

1、pom依赖:

image

2、项目说明:

1
2
3
4
makefile复制代码srpc:       rpc组件
rpc-api: 接口组件(demo):封装tcp协议接口
rpc-client: 客户端组件(demo)
rpc-server: 服务端组件

3、tcp使用:

1
复制代码(1)定义接口:

image

1
复制代码(2)服务端实现:

image

1
复制代码(3)服务端启动:

image

1
复制代码(4)客户端调用:

image

4、websocket使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
java复制代码(1)服务端启动:

如上

(2)服务端实现:
@Service
public class ServerSimpleListener implements ServerListener {
@Override
public void doAction(String msg, Channel channel) {
log.info(msg+":"+msg);
TextWebSocketFrame tws = new TextWebSocketFrame("收到信息");
channel.writeAndFlush(tws);
TextWebSocketFrame tws2 = new TextWebSocketFrame("大家都收到信息");
NettyWebSocket.send2All(tws2);
}
}

(3)客户端调用:
if(channel == null || !channel.isActive()) {
channel = WebsocketClient.connectToServer("http://127.0.0.1:1232?665887");
}
TextWebSocketFrame frame = new TextWebSocketFrame("你好\r\n");
channel.writeAndFlush(frame);

(4)客户端回调:
@Service
public class SimpleListener implements BaseListener {
private final static Logger LOGGER = LoggerFactory.getLogger(SimpleListener.class);
/**
* 一个简单的Listener方法
* @param event Guava规定此处只能有一个参数
*/
@Override
public void doAction(final String event){
if (LOGGER.isInfoEnabled()){
LOGGER.info("Received event [{}] and will take a action", event);
}
}

(5)支持指定channel,群发,离线发送

(6)逻辑图如下:

image

七、github地址:github.com/yeqi86/srpc…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%