义乌网站制作公司,网站内页收录突然没了,关于图书网站建设的书籍,网店美工考试自定义基于TCP的应用层通信协议。实现客户端对服务器的远程调用 编写服务器及客户端代码 文章目录 基于TCP的自定义应用层协议一、请求1.请求格式2.创建Request类 二、响应1.响应格式2.创建Response类 三、客户端-服务器交互四、type五、请求payload1.BasicAruguments(方法公共… 自定义基于TCP的应用层通信协议。实现客户端对服务器的远程调用 编写服务器及客户端代码 文章目录 基于TCP的自定义应用层协议一、请求1.请求格式2.创建Request类 二、响应1.响应格式2.创建Response类 三、客户端-服务器交互四、type五、请求payload1.BasicAruguments(方法公共参数2.每个方法的参数ExchangeDelareArgumentsExchangeDeleteArgumentsQueueDeclareArgumentsQueueDeleteArgumentsQueueBindArgumentsQueueUnbindArgumentsBasicPublishArgumentsBasicConsumeArgumentsBasicAckArguments 六、响应payload1.BasicReturns(返回结果公共参数2.SubscribeReturns 编写服务器代码一、创建BrokerServer二、初始化ServerSocket三、开启服务器四、停止服务器便于测试五、处理连接1.读取请求并解析2.根据请求计算响应3.将响应返回给客户端4.清除有关断开连接的socket对应的会话信息 编写客户端代码一、ConnectionFactory 连接工厂创建Connection对象 二、Connection 一次TCP连接1.Connection 属性2.初始化3.写入请求4.读取响应5.创建channel6.处理响应7.关闭连接 三、Channel 逻辑上的连接1.属性2.API远程调用服务器的创建channel销毁channel创建交换机删除交换机创建队列删除队列创建绑定删除绑定发布消息订阅消息确认消息 3.实现阻塞等待服务器的响应waitResultputResult 编写Demo1.生产者客户端2.消费者客户端测试1. 启动服务器2.启动生产者3.启动消费者 基于TCP的自定义应用层协议
一、请求
1.请求格式 type:哪个方法 length:payload的长度 payload调用的方法的参数
2.创建Request类 二、响应
1.响应格式 type:哪个方法 length:payload的长度 payload调用的方法的结果
2.创建Response类 三、客户端-服务器交互 四、type
0X1 创建channel0X2 销毁channel0X3 创建交换机 exchangeDeclare0X4 删除交换机 exchangeDelete0X5 创建队列 queueDeclare0X6 删除队列 queueDelete0X7 创建绑定 queueBind0X8 删除绑定 queueUnbind0X9 发布消息 basicPublish0Xa 订阅消息 basicConsume0xb 确认消息 basicAck0xc 服务器给客户端推送消息响应独有
五、请求payload
1.BasicAruguments(方法公共参数
rid一次请求/响应channelId一次逻辑上的连接
2.每个方法的参数
需要继承BasicArguments
ExchangeDelareArguments ExchangeDeleteArguments QueueDeclareArguments QueueDeleteArguments QueueBindArguments QueueUnbindArguments BasicPublishArguments BasicConsumeArguments BasicAckArguments 以ExchangeDeclare方法为例具体的请求格式如下
六、响应payload
1.BasicReturns(返回结果公共参数
rid 一次请求/响应channelId 一次逻辑上的连接ok 方法运行结果
以exchangeDeclare为例具体的响应格式 其他的方法返回的响应payload都是BasicReturns序列化后的结果除了0xc是响应独有的。
2.SubscribeReturns
服务器通过Consumer接口实现推送消息给客户端队列收到消息的时候会调用回调方法 响应具体格式
编写服务器代码
一、创建BrokerServer 二、初始化ServerSocket
给Serversocket初始化监听一个端口
三、开启服务器
接受客户端的连接请求线程池处理连接 四、停止服务器便于测试
runnable设置成false抛弃线程池的所有任务关闭ServerSocket服务器连接 五、处理连接
读取请求并解析根据请求计算响应将响应返回给客户端关闭客户端连接清除断开连接的socket的会话信息channelId-socket 1.读取请求并解析 2.根据请求计算响应 3.将响应返回给客户端 4.清除有关断开连接的socket对应的会话信息 编写客户端代码
一、ConnectionFactory 连接工厂
服务器地址创建connecion对象
创建Connection对象 二、Connection 一次TCP连接
socket对象 socketnew socket(host,port)多个channel 对象 创建channel对象写入请求读取响应处理响应
1.Connection 属性 2.初始化 3.写入请求 4.读取响应 5.创建channel 6.处理响应 此处在构造方法中补充创建一个扫描线程当连接未断开时不停的扫描读取服务器返回的响应。处理响应。 如果是SubScirbleReturns,使用线程池执行消费者的回调。 如果是BasicReturns,将响应的basicReturns放入对应channel的basicReturnsMap中。 7.关闭连接 三、Channel 逻辑上的连接
对应API实现客户端对服务器的远程调用
1.属性 2.API远程调用服务器的
构造请求写入请求阻塞等待服务器的响应结果
生成rid:
创建channel 销毁channel 创建交换机 删除交换机 创建队列 删除队列 创建绑定 删除绑定 发布消息 订阅消息 确认消息 3.实现阻塞等待服务器的响应
waitResult
根据rid,在basicReturnsMap集合中找;如果找到了就返回找不到阻塞等待。
putResult
将rid-basicReturns 放入basicReturnsMap集合中
编写Demo
实现消息队列生产者-消费者模型。
1.生产者客户端 2.消费者客户端 测试
1. 启动服务器 2.启动生产者 3.启动消费者