Comments (32)
你让我惊讶了!!!需要一个小时的等待,我感觉不适合用RPC调用。
from solon.
//是设定自动发 socketd 心跳的间隔时间
session.sendHeartbeatAuto(10);
from solon.
哈哈哈,是的,我有方法,必须做很重的处理。
有什么办法可以不超时吗?是否可以配置超时值?
from solon.
一个小时的等待,确实不合适。。。网络随时可能会中断的。。。我给你几个建议方案,你试试。
我先想一想。。。
from solon.
//是设定自动发 socketd 心跳的间隔时间 session.sendHeartbeatAuto(10);
我把这个命令放在客户端,但似乎并不奏效。
有什么命令可以放在服务器上吗?
from solon.
这个对你的需求没无处。。。它是管心跳间隔的。
from solon.
一个小时的等待,确实不合适。。。网络随时可能会中断的。。。我给你几个建议方案,你试试。 我先想一想。。。
如果出现网络故障,这对我来说并不是一个问题,我有一个很好的错误处理方法。
from solon.
我先想一想啊。。。1个小时的等待,什么方案更好?
from solon.
心跳的作用是无限期地维持连接吗?
from solon.
对的:)
from solon.
目前可以通过:Nami.builder() 来指定时长(现在默认是 30 秒)
Nami.builder().url("tcp://localhost:28080/demoe/rpc")
.timeout(60 * 60 * 2) //单位:秒
.encoder(SnackTypeEncoder.instance)
.create(HelloService.class);
from solon.
或者通过注解:
@NamiClient(url = "tcp://localhost:28080/demoe/rpc", timeout=60*60*2)
HelloService helloService;
from solon.
好像 Nami.builder() ,还没有 timeout 接口,我马上发个新版本
from solon.
非常感谢你,我将等待你的新版本!
from solon.
感觉 rpc 的应答模式,不大好。。。网络中断的话,响应也会中断掉。
感觉消息通知模式比较好。(A服务 通知 B服务开始干活;B服务完成任务 再通知 A服务)
from solon.
如果能在这个层面上设置一个超时,那也是很好的。
HelloService helloService = SocketD.create(session, HelloService.class);
session.sendHeartbeatAuto(30);
session.setTimeout(1000 * 30); // new
from solon.
感觉 rpc 的应答模式,不大好。。。网络中断的话,响应也会中断掉。
感觉消息通知模式比较好。(A服务 通知 B服务开始干活;B服务完成任务 再通知 A服务)
是的,你是对的,我应该通过发送消息来进行,但我仍然希望有可能配置超时。我不认为这是个坏主意。
from solon.
服务端
//启动服务端
public class ServerApp {
public static void main(String[] args) {
//启动Solon容器(SocketD bean&plugin 由solon容器管理)
Solon.start(ServerApp.class, args, app -> app.enableSocketD(true));
}
}
///定义服务端监听
@ServerEndpoint
public class ServerListener implements Listener {
@Override
public void onMessage(Session session, Message message) {
String cmd = message.bodyAsString();
if ("start".equals(cmd)) {
//通过线程池异步执行任务
Utils.pools.submit(() -> {
try {
//todo task
session.send(Message.wrap("我完成工作了"));
} catch (Throwable e) {
session.send(Message.wrap("我失败了"));
}
});
session.send(Message.wrapResponse(message, "ok"));
}
}
}
客户端
//启动客户端
public class ClientApp {
public static void main(String[] args) throws Throwable {
//启动Solon容器(SocketD bean&plugin 由solon容器管理)
Solon.start(ClientApp.class, args);
//创建会话(如果后端是WebSocekt,协议头为:ws)
Session session = SocketD.createSession("tcp://localhost:28080");
//设定30秒自动上发心跳(如果断开了,也尝试自动重链)
session.sendHeartbeatAuto(30);
//开始监听
session.listener(new Listener() {
@Override
public void onMessage(Session session, Message message) throws IOException {
//会分别收到:"ok" 和 "我完成工作了" 或 “我失败了”
}
});
//发消息并等结果(会收到 ok )
String message = session.sendAndResponse("start");
}
}
from solon.
我帮你写了下示例。。。你可以看一下
from solon.
新的版本,也正在发
from solon.
1.7.4 可以下载了。。。三种方式设定超时
//方式1
Nami.builder().url("tcp://localhost:28080/demoe/rpc")
.timeout(60 * 60 * 2) //单位:秒
.encoder(SnackTypeEncoder.instance)
.create(HelloService.class);
//方式2
@NamiClient(url = "tcp://localhost:28080/demoe/rpc", timeout=60*60*2)
HelloService helloService;
//方式3
@Configuration
public class Config {
@Bean
public NamiConfiguration initNami(){
NamiConfiguration namiConfiguration = new NamiConfiguration() {
@Override
public void config(NamiClient client, NamiBuilder builder) {
//指定编码器与解码器
builder.decoder(SnackDecoder.instance);
builder.encoder(SnackTypeEncoder.instance);
builder.timeout(60 * 60 * 2);
}
};
return namiConfiguration;
}
}
from solon.
谢谢你的快速工作!
我希望能够使用接口注解来定义路线,例如
@NamiClient(path = "/helloService")
public interface HelloService {
...
似乎对娜美,我们必须指定路线...
事实上,我正在使用这种语法
Session session = SocketD.createSession("tcp://192.168.1.21:28080", true);
session.sendHeartbeatAuto(20);
session.setTimeout(1000 * 30); // 是否可以在这里定义超时?
HelloService helloService = SocketD.create(session, HelloService.class);
所以我想知道,是否有可能有一个session.setTimeout,或者Nami是否能够自动读取接口路由,而不把路径放在url中?
from solon.
from solon.
// 这里不能定义
session.setTimeout(1000 * 30);
// 这里可以定义
@NamiClient(path = "/helloService", timeout=1000* 30)
public interface HelloService {
...
from solon.
“Nami是否能够自动读取接口路由”,这个也可以的。
比如这样配合:
@NamiClient(path = "/helloService", timeout=1000* 30)
public interface HelloService {
//..
}
//这个时候要用 upstream() ,而不是 url() //编码器,可以通过配置器统一配置 //也可以在下面指定
Nami.builder().upstream(()->"tcp://localhost:28080").create(HelloService.class);
//url() 要求放完整的路径
//upstream() 要求放服务地址提供者
from solon.
SocketD.create 的内部,最终也是使用 Nami.builder()...
public class SocketD {
......
/**
* 创建接口
* */
public static <T> T create(Supplier<Session> sessions, Encoder encoder, Decoder decoder, Class<T> service) {
URI uri = sessions.get().uri();
if (uri == null) {
uri = URI.create("tcp://socketd");
}
String server = uri.getScheme() + ":" + uri.getSchemeSpecificPart();
return Nami.builder()
.encoder(encoder)
.decoder(decoder)
.headerSet(Constants.HEADER_ACCEPT, Constants.CONTENT_TYPE_JSON) //相当于指定默认解码器 //如果指定不同的编码器,会被盖掉
.headerSet(Constants.HEADER_CONTENT_TYPE, Constants.CONTENT_TYPE_JSON) //相当于指定默认编码器
.channel(new SocketChannel(sessions))
.upstream(() -> server)
.create(service);
}
}
from solon.
你好。
超时选项似乎起作用了 ! 干得好
关于Nami.builder(),是否可以配置 "autoreconnect "和 "sendHeartbeatAuto "选项?
我试过了,但没有用
Supplier<Session> sessions = new Supplier<Session>() {
@Override
public Session get() {
Session session = SocketD.createSession("tcp://127.0.0.1:28080", true); // 自动重新连接
session.sendHeartbeatAuto(30); // 自动心脏跳动
return session;
}
};
T service = Nami.builder()
.channel(new SocketChannel(sessions))
.timeout(60 * 60 * 2) // secondes
.create(type);
from solon.
Nami.builder() 内部,已经是 autoReconnect 了。。。但是 sendHeartbeatAuto 没有
from solon.
所以 "sendHeartbeatAuto "不能被激活,而 "autoReconnect "默认是激活的。
非常感谢你的帮助,我想我们现在已经完成了这个任务。
如果你没有什么要补充的,我就让你关闭这个票。
再次感谢您的帮助! 我喜欢你的应用程序!
from solon.
1.7.5-M1 版本发布了。。。三种方式设定:
//方式1
Nami.builder().url("tcp://localhost:28080/demoe/rpc")
.timeout(60 * 60 * 2) //单位:秒
.heartbeat(30) //单位:秒
.encoder(SnackTypeEncoder.instance)
.create(HelloService.class);
//方式2
@NamiClient(url = "tcp://localhost:28080/demoe/rpc", timeout=60*60*2, heartbeat=30)
HelloService helloService;
//方式3
@Configuration
public class Config {
@Bean
public NamiConfiguration initNami(){
NamiConfiguration namiConfiguration = new NamiConfiguration() {
@Override
public void config(NamiClient client, NamiBuilder builder) {
//指定编码器与解码器
builder.decoder(SnackDecoder.instance);
builder.encoder(SnackTypeEncoder.instance);
builder.timeout(60 * 60 * 2);
builder.heartbeat(30);
}
};
return namiConfiguration;
}
}
from solon.
哦,我的上帝,你是我曾经合作过的最有反应能力的开发员。谢谢你,伙计。
我再次让你关闭这个票,让你去做Jackson列表的反序列化工作,哈哈哈。
谢谢
from solon.
要促成框架更完善,需要大量的需求和反馈:)
from solon.
Related Issues (20)
- 任务发放:优化 onMissingBean 条件与 List[Bean] 注入的边界问题 HOT 2
- 同时有 queryString 和 from-data 参数时,Controller 方法中的参数无法正确注入 HOT 4
- 建议官网RPC未来支持高性能序列化框架-flatbuffers和simple-binary-encoding HOT 1
- Solon 框架可以增加Javalin容器支持 HOT 2
- 建议Solon 未来可以支持物联网MQTT协议 HOT 2
- 新增组件 Solon Cloud SnailJob HOT 2
- 申明:Solon 的社区活动主要在 GitEE(欢迎参与)
- 【任务发放】把 solon.test 里带的 HttpUtils 改为基于 smart-http 适配
- 【任务发放】添加 Solon Auth Server 模块
- 【任务发放】添加“@Destroy”注解支持 HOT 1
- 希望插件按需加载 HOT 2
- 希望增加热部署 HOT 5
- IOC包扫描时排队某些包 HOT 3
- 【任务发放】优化 List[Bean] 注入,支持排序 HOT 1
- 【任务发放】增加 @NamiService 注解,替代 @Remoting 注解(让 Nami 成为前后配套服务) HOT 1
- 建议未来nami RPC 支持-Aeron 协议、低延迟RPC
- 后扫描的包,依赖注入List对象为空 HOT 1
- 安卓中运行solon,发现bug HOT 6
- lettuce-solon-plugin native编译出来的包,无法注入配置 HOT 4
- controller接口输出数据添加GZIP压缩数据 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from solon.