java吧 关注:1,230,814贴子:12,691,865

直播写聊天服务器,让我看看有几个小宝贝愿意看的?

只看楼主收藏回复

偏于服务器后端,
涉及到的技术点有
Gradle(类似maven,但是语法跟功能更加强大的依赖管理工具)
Netty (我说不好,牛逼就行了),
Protobuff (谷歌的序列化框架,在序列化与反序列化、数据压缩体积、拓展方面都不错的框架),
spring-boot(主要是用来解耦的),
websocket(即时通讯技术)
有兴趣后面可以加什么web-RTC啊,ffmpeg推流啊。总之想怎么玩都可以了。
然后一点点的ES6语法(毕竟要写点前端,奈何本人太菜)


IP属地:安徽1楼2021-05-25 08:56回复

    好了,新建项目,包含了几个模块,
    chat是聊天的部分,
    proto是数据传输协议的部分
    socket是通信的部分,
    state是用状态机来做指令的处理,状态变更等功能。


    IP属地:安徽2楼2021-05-25 09:10
    回复
      继续 搬好小板凳了


      IP属地:浙江3楼2021-05-25 09:13
      回复
        先准备一下依赖包。
        即parent的gradle配置。
        如图:
        build.gradle约束了一些基础配置项,如仓库来源,配置。
        然后在config.gradle中添加所需的依赖包与版本。



        IP属地:安徽4楼2021-05-25 09:20
        收起回复
          可以啊


          IP属地:浙江5楼2021-05-25 09:28
          回复
            先写协议的部分。
            如图: moneky-proto中添加protobuf的相关配置,以及protobuf的依赖。
            在main目录下新建一个proto的文件夹存储我们的协议文件。
            图二是我自定义的一个消息包。
            ResultMsg是结果。
            Package是一个消息包,可以是请求包,也可以是响应包。
            再解释一下消息包里的各个属性含义,
            resultMsg(上面说了)
            cmdType(指令类型)
            content(内容的二进制)。
            PackageGroup是多个消息包,你可以理解成网络协议里的封包的概念,即多个消息包整合一次传输。



            IP属地:安徽6楼2021-05-25 09:29
            收起回复
              然后基于这个数据包写一些简单的指令封装类:
              说一下习惯,工具类的构造方法要私有。 其他没了=。=


              IP属地:安徽7楼2021-05-25 09:43
              收起回复
                快更


                IP属地:福建8楼2021-05-25 09:53
                回复
                  大佬 请问您知道海康摄像头的视频流怎么推吗


                  IP属地:云南9楼2021-05-25 09:55
                  收起回复
                    加油,整


                    IP属地:上海来自Android客户端10楼2021-05-25 10:22
                    回复
                      大家写服务器的时候基本就这几个功能,
                      如下:
                      服务启动类:NettyServer
                      协议解码类:ProtoWebSockerHandler
                      过滤器:Filter
                      请求发送类:Dispatcher
                      Session。

                      这是请求解码的处理,稍微注意的就是,该解码类继承自SimpleChannelInboundHandler。
                      该类是通过channelRead的方法调用channelRead0的,channleRead在调用该方法后会释放ctx里的内存,所以我们这里获取数据包的时候,需要拷贝出来,如果直接读取的话,会导致ByteBuf里的index发生偏移,然后释放的时候会出现异常。啊。。。这个有兴趣自己去看源码啊~

                      Session的实现类。

                      NettyServer这个类里面的代码,也差不多这些,定义包大小啊,什么boss, worker啥的。
                      初学的话不建议深究啊~网上找个抄一下就可以了。 记得添加自己写的解码器。


                      IP属地:安徽11楼2021-05-25 10:28
                      收起回复
                        可把老夫累得,掐会腰。


                        IP属地:安徽12楼2021-05-25 10:32
                        回复
                          接下来,到重点了。开整开整!!!先问问,有谁了解过状态机么?
                          虽然聊天室不需要状态机这个,但是通过状态机,这个服务器还可以用来做回合制游戏,还可以兼容聊天室的功能


                          IP属地:安徽14楼2021-05-25 10:42
                          收起回复
                            膜拜大佬,学习学习


                            IP属地:河北来自Android客户端15楼2021-05-25 10:44
                            回复