SocketD协议消息鉴权模式怎么实现
发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,这篇文章主要介绍"SocketD协议消息鉴权模式怎么实现",在日常操作中,相信很多人在SocketD协议消息鉴权模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年10月21日SocketD协议消息鉴权模式怎么实现
这篇文章主要介绍"SocketD协议消息鉴权模式怎么实现",在日常操作中,相信很多人在SocketD协议消息鉴权模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"SocketD协议消息鉴权模式怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
SocketD 是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,SocketD可以是RSocket等其他类似协议的替代方案。它的消息协议规范具有异步,背压的双向,多路复用,断线重连,基于消息等特性。暂时只提供Java实现,目前做为Solon rpc的sockte通道协议。
本案在消息上报模式的基础上增加签权为例演示:
服务端
//启动服务端public class ServerApp { public static void main(String[] args) { //启动Solon容器(SocketD bean&plugin 由solon容器管理) Solon.start(ServerApp.class, args, app -> app.enableSocketD(true)); }}//定义服务端监听@ServerEndpointpublic class ServerListener implements Listener { @Override public void onOpen(Session session) { System.out.println("有客户端链上来喽..."); } @Override public void onMessage(Session session, Message message) throws IOException { if (session.getHandshaked() == false) { //消息是线程池分发的,确保鉴权时的消息顺序锁一下 synchronized (session) { onMessage0(session, message); } } else { onMessage0(session, message); } } private void onMessage0(Session session, Message message) throws IOException { //如果是握手,则做鉴权处理 if (message.flag() == MessageFlag.handshake) { if (Utils.isEmpty(message.header())) { session.close(); } else { Mapheaders = HeaderUtil.decodeHeaderMap(message.header()); if ("1".equals(headers.get("token"))) { //如果token是1,则设为成功握手 System.out.println("签权成功"); session.setHandshaked(true); } else { session.close(); } } return; } //没有握手成功之前,不能做别的事;且自动断开链接 if (session.getHandshaked() == false) { System.out.println("这个客户端很坏,没签权就想发包:("); session.close(); } //如果是心跳,则乎略 if (message.flag() == MessageFlag.heartbeat) { System.out.println("服务端:我收到心跳"); return; } //业务处理 System.out.println("服务端:我收到:" + message.bodyAsString()); }}
客户端
//启动客户端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"); //发送业务握手(进行签权) session.sendHandshake(Message.wrapHandshake("sn=1&token=1")); //设定30秒自动上发心跳(如果断开了,也尝试自动重链) session.sendHeartbeatAuto(30); //上报消息 session.send("Helloworld server!"); }}
到此,关于"SocketD协议消息鉴权模式怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
消息
模式
服务
客户
客户端
容器
学习
成功
业务
更多
处理
帮助
管理
通信
实用
接下来
二进制
分布式
双向
基础
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
山西民主评议软件开发电话
服务器磁盘如何配置
网络安全升级系统
动态桌面软件开发
网络安全图片素材卡
网络安全意识教育讲稿
原神pc怎么看自己的服务器
安卓软件开发 代码
软件开发哪个公司电话
光通信技术是新网络技术吗
地理数据库设计内容
乌海节能软件开发多少钱
vivo软件开发面试
网络安全工程师没有工作经验
酒店网络技术
网络安全形势调研报告
河北麻将软件开发需求
互联网 科技服务 模式
花海伴奏软件开发
自己搭建mqtt服务器 小程序
济南网络安全产业园
黑龙江数据库防护箱销售价格
华为c c 软件开发面试
研究新课题网络安全宣传周
现代计算机网络技术及应用教材
数据库被黑查询
中国公安部网络安全检查
数据库扩展名
某医院门诊预约系统的数据库设计
虚拟主机与服务器