主动端
来源:互联网 发布:linux下压缩文件夹命令 编辑:程序博客网 时间:2024/05/02 01:54
主动端:
主动端的核心是连接池SocketPool和SocketClient服务
大概流程是调用SocketClient发送数据包,SocketClient从连接池中获取一个可用连接,如果没有可用连接,就创建一个。SocketClient根据业务类型或消息类型分别对NiuxzSocket进行操作。
/** 封装一个发送信息的接口,提供常用的发送信息方法。 **/
interface SocketClient {
SocketPackage sendData(SocketPackage sp);// 发送一个消息包,并等待返回的消息包
// TODO:还可以根据双方的业务和协议添加几个更方便使用的接口方法。比如只返回消息体字段,或者直接返回json内容的
void sendHeartBeat(NiuxzSocket socket);// 发送一个心跳包,这个方法后面讲心跳包时会用到
}
class DefaultSocketClient implements SocketClient {
SocketPool socketPool;// 先假装有一个socket连接池,用来管理socket。不使用连接池的话,在这里直接注入一个NiuxzSocket就可以了。下面代码中也直接使用socket,但是一定要在使用时进行加锁操作。否则就会造成多线程访问同一个socket导致数据错乱了。
/** 此方法就是主动端工作入口了,业务代码可以直接调用这里进行发送数据 **/
SocketPackage sendData(SocketPackage sp){
NiuxzSocket niuxzSocket = socketPool.get();//获取一个socket,这里可以看到获取的socket并不是原生的socket,其实是我们自己封装后的socket
try{
niuxzSocket.write(sp.toBytes());//阻塞持续写到缓存中
niuxzSocket.lastUse = System.currentTimeMillis();//根据业务方法更新socket的状态信息
SocketPackage sp = SocketPackage.parse(niuxzSocket.getIn());//阻塞读,等待消息的返回,因为是单线程操作socket所以不存在消息插队的情况。
return sp;
}catch(Exception e){
LOG.error("发送消息包失败",e);
socketPool.destroy(niuxzSocket)
//在发生不可复用的异常时才关闭socket,并销毁这个NiuxzSocke。不可复用异常意思是IO操作到了一半不知道具体到哪了所以整个socket都不可用了。
}
finally{
if(socketPool!=null){
socketPool.recycle(niuxzSocket );//使用完这个socket后我们不要关闭,因为还要复用,让连接池回收这个socket。recycle内要判断socket是否是销毁状态。
}
}
}
}成都哪家男科医院治疗阳痿好
成华区割包皮医院
成华区治疗早泄好的医院
温江区做人流哪家医院好点?
温江区做人流较佳时间
双流区怀孕多少天就不能打胎了
双流区无痛人流医院排名
锦江区做人流哪家医院好
锦江区治月经不调好的妇科医院
天府新区治盆腔炎专业的医院
成都妇科医院在线咨询
成都阴唇肥大手术多少钱
成都做阴道紧缩贵吗
成都小阴唇肥大手术哪个医院好
成都做处女膜得多少钱
成都小阴唇肥大治疗方法
成都九龙医院十项精品服务,让患者舒心就医
成都婚前检查项目及费用
- 主动端
- puppet kick服务端主动向client端推送
- 服务器主动向android手机端推送消息
- 【BLE】CC2541之主从机端主动断开连接
- 主动数据库
- 主动制作
- 主动暂停
- 主动模式
- 主动生活
- 主动维护
- 编程,你主动还是我主动
- 服务器主动向android手机端推送消息---------windows下Androidpn环境搭建
- 服务器主动向android手机端推送消息---------Web Service技术解析
- 服务器主动向android手机端推送消息---------Web Service技术解析(二)
- 服务器主动向android手机端推送消息---------Linux下Androidpn环境搭建
- 服务器主动向android手机端推送消息---------Linux下实现
- 关于FTP客服端与服务端连接的时候,连接方式主动与被动的问题
- 如何获取主动
- Android 在Coding中防止内存泄漏——LeakCanary
- Java Socket 技术介绍
- java线程详解
- Spring Boot如何使用Spring Security进行安全控制(十一)
- 火车购票
- 主动端
- java之yield(),sleep(),wait()区别详解
- springMVC注解学习记录
- EasyMock 新版本用法和实战经验总结和mock.js 使用的用法
- RobotFramework在线安装好appiumlibrary包后,导入一直是显示红色
- JoinColumn注解
- uml类图
- 设置标签位置:Excel图表学习记第13课
- Swift4 学习笔记——基础篇