Handshake 握手信息接口
在 Session 的接口中,Handshake 非常重要的一个,也是会话参数(Session::param)的源来。在监听的 onOpen 事件中,可以做鉴权,可以做握手交互(反馈元信息)。可以获取:
- 连接地址
- 参数。由 queryString 和 metaString 解析后汇总
还可以输出元信息给对端(通过 Session::param 获取)。
public interface Handshake {
/**
* 协议版本
*/
String version();
/**
* 获请传输地址
*
* @return tcp://192.168.0.1/path?user=1&path=2
*/
URI uri();
/**
* 请求路径
*/
String path();
/**
* 获取参数集合
*/
Map<String, String> paramMap();
/**
* 获取参数
*
* @param name 参数名
*/
String param(String name);
/**
* 获取参数或默认值
*
* @param name 参数名
* @param def 默认值
*/
String paramOrDefault(String name, String def);
/**
* 放置参数
*/
Handshake paramPut(String name, String value);
/**
* 输出元信息
*/
void outMeta(String name, String value);
}
应用示例:
//客户端
ClientSession clientSession1 = SocketD.createClient("sd:tcp://127.0.0.1:8602/")
.config(c->c.metaPut("u","noear").metaPut("p","2"))
.open();
//服务端
public class Demo {
public static void main(String[] args) throws Throwable {
//::启动服务端
SocketD.createServer("sd:tcp")
.config(c -> c.port(8602))
.listen(new SimpleListener() {
@Override
public void onOpen(Session session) throws IOException {
String user = session.param("u");
if ("noear".equals(user) == false) { //如果不是 noear,关闭会话
session.close();
} else {
//还可以添加握手输出
session.handshake().outMeta("server-ver","1");
}
}
})
.start();
}
}