目录

netty中使用socketio

../../images/weixin_public.png

时刻不忘拜读API:vue.js 官方文档拜读 git源代码地址: Socket.IO-client Java api文档地址: socket.io(node.js接口)

值得深入研究的API接口文档: 【javascript】 node.js版本的API

netty-socketio 概述 netty-socketio是一个开源的Socket.io服务器端的一个java的实现,它基于Netty框架,可用于服务端推送消息给客户端。

    说到服务端推送技术,一般会涉及WebSocket,WebSocket是HTML5最新提出的规范,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况,为了兼容所有浏览器,给程序员提供一致的编程体验,

    SocketIO将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口,也就是说,使用SocketIO时不用担心兼容问题,底层会自动选用最佳的通信方式。

        netty-socketio 示例demo
              pom.xml

org.springframework.boot spring-boot-starter-web com.corundumstudio.socketio netty-socketio 1.7.18 org.projectlombok lombok 1.18.4 provided 启动类 NettySocketioApplication

@SpringBootApplication @Slf4j public class NettySocketioApplication implements CommandLineRunner {

public static void main(String[] args) {
    SpringApplication.run(NettySocketioApplication.class, args);
}
 
@Autowired
private SocketIOServer socketIOServer;
 
@Override
public void run(String... strings) {
    socketIOServer.start();
    log.info("socket.io启动成功!");
}

} Message 消息类

@Data public class Message {

private String id; // 消息ID
 
private String msg; // 消息内容
 
private Date sendDate; // 发送日期

} 配置类 NettySocketioConfig

@Configuration public class NettySocketioConfig { /** * netty-socketio服务器 */ @Bean public SocketIOServer socketIOServer() { com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration(); config.setHostname(“localhost”); config.setPort(9092);

    SocketIOServer server = new SocketIOServer(config);
    return server;
}
 
/**
 * 用于扫描netty-socketio的注解,比如 @OnConnect、@OnEvent
 */
@Bean
public SpringAnnotationScanner springAnnotationScanner() {
    return new SpringAnnotationScanner(socketIOServer());
}

} 消息处理器 MessageEventHandler

@Component @Slf4j public class MessageEventHandler {

@Autowired
private SocketIOServer socketIoServer;
 
public static ConcurrentMap<String, SocketIOClient> socketIOClientMap = new ConcurrentHashMap<>();
 
/**
 * 客户端连接的时候触发
 *
 * @param client
 */
@OnConnect
public void onConnect(SocketIOClient client) {
    String mac = client.getHandshakeData().getSingleUrlParam("mac");
    //存储SocketIOClient,用于发送消息
    socketIOClientMap.put(mac, client);
    //回发消息
    client.sendEvent("message", "onConnect back");
    log.info("客户端:" + client.getSessionId() + "已连接,mac=" + mac);
}
 
/**
 * 客户端关闭连接时触发
 *
 * @param client
 */
@OnDisconnect
public void onDisconnect(SocketIOClient client) {
    log.info("客户端:" + client.getSessionId() + "断开连接");
}
 
/**
 * 客户端事件
 *
 * @param client   客户端信息
 * @param request 请求信息
 * @param data     客户端发送数据
 */
@OnEvent(value = "messageevent")
public void onEvent(SocketIOClient client, AckRequest request, Message data) {
    log.info("发来消息:" + data);
    //回发消息
    client.sendEvent("messageevent", "我是服务器都安发送的信息");
    //广播消息
    sendBroadcast();
}
 
/**
 * 广播消息
 */
public void sendBroadcast() {
    for (SocketIOClient client : socketIOClientMap.values()) {
        if (client.isChannelOpen()) {
            client.sendEvent("Broadcast", "当前时间", System.currentTimeMillis());
        }
    }
 
}

} html 页面

<!doctype html>

websocket-java-socketio

Socket.io Test

Waiting for input

hello world!

执行输出 运行 SpringBoot 服务器

mvn spring-boot:run 点击网页按钮

Netty】Netty 入门案例分析 ( Netty 模型解析 | Netty 服务器端代码 | Netty 客户端代码 )

https://blog.csdn.net/shulianghan/article/details/106522195

socket.io 使用protobuf 协议发送消息

https://blog.csdn.net/cn_yaojin/article/details/128317056

SpringBoot集成netty-socketio

https://www.jianshu.com/p/d7cf8982b9e4

即时通讯 | 记一次从0-1搭建IM在线实时聊天进阶思考过程

https://www.modb.pro/db/579407

Source code analysis of Netty startup process (based on 4.1.23)

https://aws.plainenglish.io/source-code-analysis-of-netty-startup-process-based-on-4-1-23-ebea50cf5419

———————————————— 版权声明:本文为CSDN博主「蜗牛杨哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u014635374/article/details/115893751