当前位置:   article > 正文

基于netty的socket.io集成_netty-socketio

netty-socketio


前言

基于netty的socket.io集成非常容易、并且功能强大,协议可自定义长连接、websocket等,非常适用与前后端互相推送消息、以及聊天等功能。


一、网上集成的例子

  1. 后端基于这个进行集成
https://www.jianshu.com/p/c67853e729e2
  • 1
  1. 我用的是maven是1.7.19
        <dependency>
            <groupId>com.corundumstudio.socketio</groupId>
            <artifactId>netty-socketio</artifactId>
            <version>1.7.19</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 前端代码,拿来即用,可以根据ip连接本地或者线上环境
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>NETTY SOCKET.IO DEMO</title>
    <base>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
    
    <style>
        body {
            padding: 20px;
        }
        #console {
            height: 350px;
            overflow: auto;
        }
        .username-msg {
            color: orange;
        }
        .connect-msg {
            color: green;
        }
        .disconnect-msg {
            color: red;
        }
    </style>
</head>
 
<body>
    
    <h1>demo</h1>
    <div id="console" class="well"></div>
    <br/>
    工号:<input type="text" name="lastname" id="account">
    <br/>
    内容:<div>
        <div style="width: 410px;float: left"><textarea id="sendMsg" style="width: 400px;height: 100px;"></textarea></div>
        <div style="float: left"><input type="button" value="发送" onclick="sendMessage()" style="width: 100px;height: 50px;"/></div>
    </div>
</body>
<script type="text/javascript">
    var socket;
    connect();
 
    function connect() {
        //初始连接,用户的id参数等
        var opts = {
            query: 'userId=' +'1',
            upgrade: false,
            transports: [ 'websocket' ] //开启websocket协议
        };
        socket = io.connect('http://localhost:9099', opts);
        socket.on('connect', function () {
            console.log("连接成功");
            serverOutput('<span class="connect-msg">连接成功</span>');
        });

        // 监听服务器推送的消息
        socket.on('push_event', function (data) {
            output('<span class="username-msg">' + data + ' </span>');
            console.log(data);
        });
        // 监听服务器下线
        socket.on('disconnect', function () {
            serverOutput('<span class="disconnect-msg">' + '已下线! </span>');
        });

		socket.on('connect_timeout',function(){
            output('<span class="username-msg">' + '与服务器连接超时' + ' </span>');
        })
        // 监听服务器推送的消息
        socket.on('message', function (data) {
            output('<span class="username-msg">' + data + ' </span>');
            console.log(data);
        });
    }
    
    function output(message) {
        var element = $("<div>" + " " + message + "</div>");
        $('#console').prepend(element);
    }
 
    function serverOutput(message) {
        var element = $("<div>" + message + "</div>");
        $('#console').prepend(element);
    }
    // 指定要推送的用户id与消息内容推送到后端,后端自定义监听message事件字符串解析拿到id推送到相关用户
    function sendMessage(){
        var msg= $("#sendMsg").val();
        var account= $("#account").val();
        
        socket.emit('message',account+'-'+msg);

        $("#sendMsg").val("");
    }
</script>
</html>


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

二、出现的一些问题记录

  1. 两端消息不通可能是版本不兼容的问题,比如后端用的2x,前端用的4x就会不兼容,需要找到兼容的版本去测试,我是用的2x底版本。
  2. 本地正常后部署线上环境不通:
    (1)找到配置文件把localhost注释掉在这里插入图片描述
    (2)如果是用域名连接,本地连接html打开控制台看连接地址后面有没有多的路径,这个组件自己会多配置一个socketio的路径,服务器在路由上需要匹配上
    (3) 云服务器都会有自己的防火墙保护,socket.io通信需要暴露出来一个端口进行连接,服务器如果不主动开放这个端口是连不上的,去防火墙增加自己的socket的端口就能访问了

三、优化项

  1. 连接初始化进行鉴权,如携带token
  2. 使用线程池管理线程推送消息
    在这里插入图片描述在这里插入图片描述

四、总结

如要使用更多的事件以及功能去官方文档找:https://socket.io

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/83542
推荐阅读
相关标签
  

闽ICP备14008679号