被动端
来源:互联网 发布:mac日历收到垃圾邀请 编辑:程序博客网 时间:2024/04/26 07:42
被动端
被动端的核心是NiuxzServer和Worker和SocketHandler
大概流程是开启端口等待连接、接受连接创建线程、达到线程最大数,拒绝连接、连接进入开始读取数据、读取到数据后进行分支处理,处理完后把结果响应到主动端,完成一次交互。继续读取。
/**开启一个ServerSocket并等待连接,联入后开启一个线程进行处理**/
class NiuxzServer{
ServerSocket serverSocket;
HashMap sockets = new HashMap();
public static AtomicInteger workerCount = 0;
public Object waitLock = new Object();
int maxWorkerCount = 100;//允许100个连接进入
int port;//配置一个端口号
/**工作入口**/
void work(){
serverSocket = new ServerSocket(port);
while(true){
Socket socekt = serverSocket.accept();//阻塞等待连接
NiuxzSocket niuxzSocket = new NiuxzSocket(socket);
sockets.put(niuxzSocket ,1);//将连接放入map中
Worker worker = new Worker(niuxzSocket );//创建一个工作线程
worker.start();//开始线程
while(true){
if(workerCount.incrementAndGet()>=maxWorkerCount){//如果超过了规定的最大线程数,就进入等待,等待其他连接销毁
synchronized(waitLock){
if(workerCount.incrementAndGet()>=maxWorkerCount){//double check 确定进入等待前没有正在断开的socket
waitLock.wait();
}else{
break;
}
}
}else{
break;
}
}
}
}
/**销毁一个连接**/
void destroy(NiuxzSocket socket){
synchronized(waitLock){
sockets.remove(socket);//从池子里删除
workerCount.decrementAndGet();//当前连接数减一
waitLock.notify();//通知work方法 可以继续接受请求了
}
}
/**创建一个工作者线程类,处理连入的socket**/
class Worker extends Thread{
HashMap handlers;//针对每种行为标识做的消息处理器。
NiuxzSocket socket;
Worker(NiuxzSocketsocket){//构造函数
this.socket = socket;
}
void run(){
try{
while(true){
SocketPackage sp = SocketPackage.parse(socket.getIn());//阻塞读,直到读完一个消息包未知,这样可以解决粘包或半包的问题
SocketHandler handler = handlers.get(sp.getAction());//根据行为标识获取响应的处理器
handler.handle(sp,socket);//处理结果和响应信息都在handler中回写
}
}cache(Exception e){
LOG.error("连接异常中断",e);
NiuxzServer.destroy(socket);成都药流和人流哪个伤害小
成都九龙医院“二胎优生门诊”挂牌开诊
成都治疗宫颈疾病哪家好
成都男科医院排名
小便刺痛是什么病
成都九龙医院做男科检查好吗
成都做无痛人流好的医院
成都做包皮手术去哪家医院好
成都做无痛人流的好医院
成都割包皮需要多少钱
成都武侯治疗早泄哪个医院好?
成都武侯区那个医院做阴茎延长好
成都金牛治疗阳痿的医院?
成都金牛区附近哪里有治疗早泄的好医院
第一次流产可以做药流吗?
成都红瓦寺附近好的人流医院
成都双流哪个医院治早泄好?
成都龙泉哪家医院治疗阳痿效果好?
在成都双流附近的医院做人流需要多少钱?
成都火车北站旁边人流医院哪个好
成都龙泉驿做人流多少钱?
成都武侯区有哪些医院可以做无痛人流
}
}
}
}
/** 创建一个消息处理器 SocketHandler 接收所有内容后 回显 **/
class EchoSocketHandler implements SocketHandler {
/** 处理socket请求 **/
void handle(SocketPackage sp, NiuxzSocket socket) {
sp.setAction(10);// 比如协议中的行为标识10是响应成功的意思
socket.write(sp.toBytes());// 直接回写
}
}
至此两端的工作代码已经初步完成。socket可以按照相互制定的通讯方式进行通讯了。
- 被动端
- 被动
- 被动生存
- 被动DNS
- 关于FTP客服端与服务端连接的时候,连接方式主动与被动的问题
- 被动实例化
- 被动实例化
- iis ftp被动模式
- 第三十章 被动语态
- 被动防SQL注入
- 浅谈现在完成时被动语态
- 简单被动技能
- 取消CuteFtp被动模式
- 到底什么是“被动收入”?
- ftp 主被动模式
- 变被动为主动
- 被动的主动性
- vstftpd被动模式
- 评分卡系统产品设计问题汇总
- 详解Java多线程编程中线程的启动、中断或终止操作
- java对象初始化过程
- 数据结构与算法系列文章
- 虚拟机安装软件与docker容器安装区别
- 被动端
- recyclerview长按删除
- Java | Java没有sizeof
- 程序员,该如何避免成为一个“油腻的怪物”
- HTML Web存储
- MPU6050开发 -- 卡尔曼滤波
- phpstudy搭建Linux的php环境
- Vocablex64.Incl.Keygen-AiR\ Vo
- XP画板总结