Netty-socketio实时推送

业务场景: canal 监听 mysql  binlog 日志 并将其推送到 kafka 中 由于部门大部分是php 作为后台开发 ,而 kafka官方不支持对 php 的 客户端支持 需要第三方组件。

解决方案: 使用 Java 作为消费者 并使用 Netty-socketio 将数据实时推送给 php 

核心代码如下:

public class SocketIoService {

static SocketIOServer server;

static Map<String, SocketIOClient> clientsMap = new HashMap<>();

public void startServer() throws InterruptedException {

server = new SocketIOServer(PropertiesConf.nettySocketConf());

//添加客户端连接事件

server.addConnectListener(client -> {

String sa = client.getRemoteAddress().toString();

client.getSessionId().toString();

String clientIp = sa.substring(1, sa.indexOf(":"));//获取设备ip

Map params = client.getHandshakeData().getUrlParams();

 

//获取客户端连接的uuid参数

Object object = params.get("uuid");

String uuid = "";

if (object != null) {

uuid = ((List<String>) object).get(0);

//将uuid和连接客户端对象进行绑定

clientsMap.put(uuid, client);

}

});

server.start();

}

 

 

/**

* 给所有连接客户端推送消息

*

* @param eventType 推送的事件类型

* @param message 推送的内容

*/

public void sendMessageToAllClient(String eventType, String message) {

Collection<SocketIOClient> clients = server.getAllClients();

for (SocketIOClient client : clients) {

client.sendEvent(eventType, message);

}

}

 

/**

* 停止服务

*/

public void stopServer() {

if (server != null) {

server.stop();

server = null;

}

}

 

public static SocketIOServer getServer() {

return server;

}

 

 

服务端推送数据代码:

ioService.sendMessageToAllClient("push_qa", "实时推送数据");

前端调用 :

<script type="text/javascript" src="<%=basePath%>/resources/js/socketio/socket.io.js"></script>

 

var socket = io.connect('http://your_host:port');

socket.on('push_qa',function(data){

var personInfo = JSON.parse(data);

console.log(personInfo);

});

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值