本文将介绍使用 Okra 框架帮助开发者快速搭建高性能应用程序 Socket 服务端。 博主接触的网络游戏(包含但不限于网页, 手机)的服务端通信使用的协议基本上就 Socket,Http 或是 WebSocket 三种方式。 本系列教程将介绍利用 Okra 框架这三种通信方式的示例。
点击阅读Okra框架(二) 搭建Socket服务器
本文将介绍使用 Okra 框架帮助开发者快速搭建高性能应用程序 Socket 服务端。 博主接触的网络游戏(包含但不限于网页, 手机)的服务端通信使用的协议基本上就 Socket,Http 或是 WebSocket 三种方式。 本系列教程将介绍利用 Okra 框架这三种通信方式的示例。
1. 创建 Executor
在通信过程中,我们可以把每一个消息可以当做是一个任务。Executor 则是 Okra 中负责处理每一条消息的任务执行者。 同时,每一个 Executor 都是一个并发线程。 如下代码实现一个简单的示例 ObjectExecutor:
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
public class ObjectExecutor implements Executor {
protected Session session;
protected Object request;
public ObjectExecutor(Session session, Object request) {
this.session = session;
this.request = request;
}
@Override
public void onExecute() {
if (null == request) {
throw new NullPointerException("request");
}
// TODO: Just send message back, do some logic on real
session.writeAndFlush(String.valueOf(request));
}
@Override
public void release() {
this.session = null;
this.request = null;
}
}
Okra 提供了封装好的 Disruptor 桥用于 Netty 结合 Disruptor。Okra 通过 Executor 工厂让用户可以便捷灵活的定制特殊的处理者.
1
2
3
4
5
6
public class ExampleSocketHandler extends DisruptorAdapterBy41xHandler<Object> {
@Override
protected Executor newExecutor(Session session, Object msg) {
return new ObjectExecutor(session, msg);
}
}
2. 创建 Server
然后创建一个 Server 继承 TcpProtocolServer 实现自己的服务器类. 增加 Handler 处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class TcpServer extends TcpProtocolServer {
public TcpServer(int port) {
setPort(port);
}
private static final ChannelHandler FRAME_PREPENDER = new LengthFieldPrepender(4, false);
@Override
protected ChannelHandler newChannelInitializer() {
return new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) throws Exception {
ChannelPipeline cp = ch.pipeline();
cp.addLast("frame", new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 2, 0, 2));
cp.addLast("prepender", FRAME_PREPENDER);
// Any other useful handler
cp.addLast("handler", new ExampleSocketHandler());
}
};
}
}
3. 启动服务器
假如你的项目中使用了 Spring 框架,那么只需要在配置如下 bean 就可以启动:
1
2
3
4
<!-- Tcp server -->
<bean id="tcpServer" class="org.ogcs.okra.example.socket.TcpServer" init-method="start" destroy-method="stop">
<constructor-arg name="port" value="${tcp.port}"/>
</bean>
普通 Java 程序:
1
2
TcpServer server = new TcpServer(9005);
server.start();
只需要简短的两行代码就可以启动服务器了。
4. 总结
本文介绍了使用 Okra 快速搭建高可用,高性能,可扩展,高并发服务器的示例。Okra 通过封装,简化了服务器搭建过程。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 TinyZ Zzh (包含链接: https://tinyzzh.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。 如有任何疑问,请 与我联系 (tinyzzh815@gmail.com) 。
评论