作者 crossoverJie

:sparkles: Introducing new features.客户端 push 消息 OK

# netty-action
Netty in action
Netty 个人实战
... ...
package com.crossoverjie.netty.action.common.util;
import java.util.Random;
import java.util.UUID;
/**
* Function:
*
* @author crossoverJie
* Date: 22/05/2018 17:10
* @since JDK 1.8
*/
public class RandomUtil {
public static int getRandom() {
double random = Math.random();
return (int) (random * 100);
}
}
... ...
... ... @@ -38,7 +38,7 @@ public class HeartbeatClient {
@Value("${netty.server.host}")
private String host;
private SocketChannel channel ;
private SocketChannel channel;
@PostConstruct
public void start() throws InterruptedException {
... ... @@ -57,12 +57,13 @@ public class HeartbeatClient {
/**
* 发送消息
*
* @param customProtocol
*/
public void sendMsg(CustomProtocol customProtocol){
public void sendMsg(CustomProtocol customProtocol) {
ChannelFuture future = channel.writeAndFlush(customProtocol);
future.addListener((ChannelFutureListener) channelFuture ->
LOGGER.info("手动发消息成功={}", JSON.toJSONString(customProtocol)));
LOGGER.info("客户端手动发消息成功={}", JSON.toJSONString(customProtocol)));
}
}
... ...
... ... @@ -6,6 +6,7 @@ import com.crossoverjie.netty.action.client.vo.res.SendMsgResVO;
import com.crossoverjie.netty.action.common.enums.StatusEnum;
import com.crossoverjie.netty.action.common.pojo.CustomProtocol;
import com.crossoverjie.netty.action.common.res.BaseResponse;
import com.crossoverjie.netty.action.common.util.RandomUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
... ... @@ -37,7 +38,7 @@ public class IndexController {
@ResponseBody
public BaseResponse<SendMsgResVO> sendMsg(@RequestBody SendMsgReqVO sendMsgReqVO){
BaseResponse<SendMsgResVO> res = new BaseResponse();
heartbeatClient.sendMsg(new CustomProtocol(122,sendMsgReqVO.getMsg())) ;
heartbeatClient.sendMsg(new CustomProtocol(RandomUtil.getRandom(),sendMsgReqVO.getMsg())) ;
SendMsgResVO sendMsgResVO = new SendMsgResVO() ;
sendMsgResVO.setMsg("OK") ;
... ...
package com.crossoverjie.netty.action.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
/** 是否打开swagger **/
@ConditionalOnExpression("'${swagger.enable}' == 'true'")
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.crossoverjie.netty.action.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("sbc order api")
.description("sbc order api")
.termsOfServiceUrl("http://crossoverJie.top")
.contact("crossoverJie")
.version("1.0.0")
.build();
}
}
\ No newline at end of file
... ...
package com.crossoverjie.netty.action.controller;
import com.crossoverjie.netty.action.common.enums.StatusEnum;
import com.crossoverjie.netty.action.common.pojo.CustomProtocol;
import com.crossoverjie.netty.action.common.res.BaseResponse;
import com.crossoverjie.netty.action.common.util.RandomUtil;
import com.crossoverjie.netty.action.server.HeartBeatServer;
import com.crossoverjie.netty.action.vo.req.SendMsgReqVO;
import com.crossoverjie.netty.action.vo.res.SendMsgResVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.UUID;
/**
* Function:
*
* @author crossoverJie
* Date: 22/05/2018 14:46
* @since JDK 1.8
*/
@Controller
@RequestMapping("/")
public class IndexController {
@Autowired
private HeartBeatServer heartbeatClient ;
/**
* 向服务端发消息
* @param sendMsgReqVO
* @return
*/
@ApiOperation("发送消息")
@RequestMapping("sendMsg")
@ResponseBody
public BaseResponse<SendMsgResVO> sendMsg(@RequestBody SendMsgReqVO sendMsgReqVO){
BaseResponse<SendMsgResVO> res = new BaseResponse();
heartbeatClient.sendMsg(new CustomProtocol(RandomUtil.getRandom(),sendMsgReqVO.getMsg())) ;
SendMsgResVO sendMsgResVO = new SendMsgResVO() ;
sendMsgResVO.setMsg("OK") ;
res.setCode(StatusEnum.SUCCESS.getCode()) ;
res.setMessage(StatusEnum.SUCCESS.getMessage()) ;
res.setDataBody(sendMsgResVO) ;
return res ;
}
}
... ...
... ... @@ -49,7 +49,7 @@ public class HeartBeatSimpleHandle extends SimpleChannelInboundHandler<CustomPro
//手动处理数据并返回
customProtocol.setHeader(customProtocol.getHeader() + 1000);
customProtocol.setContent(customProtocol.getContent() + 1000);
customProtocol.setContent(customProtocol.getContent() + "asdfg");
ctx.writeAndFlush(Unpooled.copiedBuffer(customProtocol.toString(), CharsetUtil.UTF_8));
}
}
... ...
package com.crossoverjie.netty.action.server;
import com.alibaba.fastjson.JSON;
import com.crossoverjie.netty.action.channel.init.HeartbeatInitializer;
import com.crossoverjie.netty.action.common.pojo.CustomProtocol;
import io.netty.bootstrap.ServerBootstrap;
... ... @@ -77,6 +78,9 @@ public class HeartBeatServer {
* @param customProtocol
*/
public void sendMsg(CustomProtocol customProtocol){
channel.writeAndFlush(customProtocol) ;
ChannelFuture future = channel.writeAndFlush(customProtocol);
future.addListener((ChannelFutureListener) channelFuture ->
LOGGER.info("服务端手动发消息成功={}", JSON.toJSONString(customProtocol)));
}
}
... ...
# web port
server.port=8081
# 是否打开swagger
swagger.enable = true
netty.server.port=11211
logging.level.root=info
\ No newline at end of file
... ...