首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)

这里需要简单解释一下,TCP/UDP的区别,简单地总结一。...LoginAuthRespHandler:是当客户端与服务端长连接建立成功后,客户端主动向服务端发送一条登录认证消息,带入与当前用户相关的参数,比如token,服务端收到此消息后,到数据库查询该用户信息...,如果是合法有效的用户,则返回一条登录成功消息给该客户端,反之,返回一条登录失败消息给该客户端,这里,就是在接收到服务端返回的登录状态后的处理handler。...下面讲到消息重发机制的时候详细地讲。在else里,收到其他消息后,立马给服务端返回一个消息接收状态报告,告诉服务端,这条消息我已经收到了,这个动作,对于后续需要做的离线消息会有作用。...然后,我们再来调试一握手认证消息即心跳消息: 可以看到,长连接建立成功后,客户端会给服务端发送一条握手认证消息(1001),服务端收到握手认证消息,给客户端返回一条握手认证状态消息,客户端收到握手认证状态消息

98930

自已开发IM有那么难吗?手把手教你自撸一个Andriod版简易IM (有源码)

这里需要简单解释一下,TCP/UDP的区别,简单地总结一。...,如果是合法有效的用户,则返回一条登录成功消息给该客户端,反之,返回一条登录失败消息给该客户端,这里,就是在接收到服务端返回的登录状态后的处理handler。...连接成功后,立即发送一条握手消息,再次梳理一整体流程: 1)客户端根据服务端返回的host及port,进行第一次连接; 2)连接成功后,客户端向服务端发送一条握手认证消息(1001); 3)服务端在收到客户端的握手认证消息后...下面讲到消息重发机制的时候详细地讲。在else里,收到其他消息后,立马给服务端返回一个消息接收状态报告,告诉服务端,这条消息我已经收到了,这个动作,对于后续需要做的离线消息会有作用。...可以看到,长连接建立成功后,客户端会给服务端发送一条握手认证消息(1001),服务端收到握手认证消息,给客户端返回一条握手认证状态消息,客户端收到握手认证状态消息后,即启动心跳机制。

1.3K31
您找到你想要的搜索结果了吗?
是的
没有找到

SQL注入的几种类型和原理

页面代码只返回一条结果,UNION SELECT 获取的结果无法输出到页面,可以构造不存在的ID,使第一条语句查询结果为空,返回 UNION SELECT获取的结果。 ? ?...有读者可能迷惑,我还是解释一下,读库、读表、读字段、读数据。我这里使用了几个函数,连接字符的group_concat,指定分割符连接的 concat_ws。...查询不回现内容,但会打印错误信息 Update、Insert等语句,会打印错误信息(前面的union 不适合 update 语句) 这种场景的源码是怎样的?...什么样的场景这个很有用?相对于时间盲住来说这个能够直接查询到结果,比时间盲住更好。 但同时它的要求也很高,为什么?...注入方法 下面以上面的源码为例测试。 ? 可以看到输入的单引号被转义。如果下面构造的特殊的参数,页面就会变成这样。 ? 解释一下为什么这样?

5.3K52

如何能在实战中完成分布式事务

重试机制 有些同学可能问好像我们上面的代码基本能保证分布式事务了吧?...为什么我们选择了消息队列进行重试? 因为我们的业务逻辑是依靠消息队列的,我们就不需要引入定时任务,直接依靠消息队列即可。 幂等 判断一个程序猿经验是否老道可以从他写代码的时候能否考虑到幂等就可以看出。...这里先解释一下幂等的概念:可以简单的认为任意多次执行所产生的影响和一次执行的影响相同。 为什么我们完成分布式事务的时候需要幂等?...只有标记这里还是不够,为什么呢这里我们用个例子来说明一,把上面的rollback简单优化一: @Transactional void rollback(int orderId, int...所以我们这里采用第二个策略,保存一条记录,我们在pay也检查有没有这条记录,所以优化之后的代码为: @Transactional void payAccount(int orderId

42210

并发编程 | 从Future到CompletableFuture - 简化 Java 中的异步编程

以下是你需要处理的一系列操作:根据用户的搜索条件,查询所有可用的飞机票对每一个飞机票,查询与之匹配的可用酒店对每一个飞机票和酒店的组合,计算总价格将所有的飞机票和酒店的组合按照价格排序将结果返回给用户实现为了实现这个需求...复杂的错误处理在使用 Future 链式处理异步任务时,如果中间某个环节出现错误错误处理的复杂性就会大大增加。...常见面试题解释一下 Future 接口在 Java 中的用途?解释一下 Future 的局限性是什么?解释一下 CompletableFuture 的用途以及它如何克服 Future 的局限性?...解释一下 CompletableFuture 的 thenApply(),thenCompose(),和 thenCombine() 方法的作用及区别?...解释一下 CompletableFuture 的工作原理?阅读完文章的你,是否可以回答这些问题呢?我在留言等你。总结好了,到这里就结束了,我们来回顾一

2.5K101

2021金三银四,啃完这35个Java技术栈,冲刺年薪百万!

from=pc] 一、JVM面试专题 内存模型以及分区,需要详细到每个区放什么? 什么情况会发生栈内存溢出? 详解JVM内存模型 JVM内存为什么要分成新生代,老年代,持久代。...新生代中为什么 要分为Eden和Survivor 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。...内存屏障 说一 JVM由那些部分组成,运行流程是什么? 说一 JVM 运行时数据区 详细的介绍程序计数器?(重点理解) 你能给我详细的介绍Java堆吗?...能不能解释一下方法区 什么是JVM字节码执行引擎 堆栈的区别是什么? Java会存在内存泄漏吗?请说明为什么? 垃圾回收器的原理是什么?有什么办法手动进行垃圾回收?...丢消息了怎么办? 解释一下什么叫死信队列 持久化消息非常慢怎么办? 消息的不均匀消费 ActiveMQ 中的消息重发时间间隔和重发次数吗? 二十二、Java基础面试题 Java 语言有哪些特点?

1.8K22

膨胀了!我要手写QQ底层!(附源码)

为什么使用TCP? 这里需要简单解释一下,TCP/UDP/WebSocket的区别。...引用网上一张图片来解释一下在TCP出现拆包、粘包以及正常状态的三种情况,如侵联系我删除: ? 了解了TCP出现拆包/粘包的原因,那么,如何解决呢?...,带入与当前用户相关的参数,比如token,服务端收到此消息后,到数据库查询该用户信息,如果是合法有效的用户,则返回一条登录成功消息给该客户端,反之,返回一条登录失败消息给该客户端,这里,就是在接收到服务端返回的登录状态后的处理...连接成功后,立即发送一条握手消息,再次梳理一整体流程: 客户端根据服务端返回的host及port,进行第一次连接。...下面讲到消息重发机制的时候详细地讲。在else里,收到其他消息后,立马给服务端返回一个消息接收状态报告,告诉服务端,这条消息我已经收到了,这个动作,对于后续需要做的离线消息会有作用。

1.5K3130

关于使用现代CSS新特性布局嵌套评论组件的尝试,希望对你有所启发

在我的好奇心驱使,我想为什么不去查看一些热门网站,并了解一它们是如何实现评论组件的布局。起初,我认为这将是一个简单的任务,但实际并非如此。...让我简要地解释一下子网格(subgrid)来给您一个概念。考虑以下CSS网格: <!...参考以下示意图: 你的第一反应可能误导你:「嗨,这看起来就像一个带有左边框和底部边框以及左下角的边框半径的矩形。」...size) / 2); top: 2rem; bottom: 0; width: 2px; background: #222; } } } 上面的例子展示了为什么我更喜欢使用样式查询而不是...评论组件的这部分将需要处理以下内容: 最小宽度 长内容 多语言内容(左到右 vs 右到左) 上下文菜单 评论交互 编辑状态 错误状态 我在这篇文章中无法详细展示上述所有内容,因为可能需要写一本书来完整讲述

30030

接口自动化测试实践指导():接口自动化测试断言设置思路

在前两篇文章中详细给小伙伴们讲解了一接口自动化需要做哪些准备工作及接口测试场景有哪些,本篇文章是最后一篇,主要分享一接口自动化测试断言设置思路。...2) 验证关键字段值一般接口中会设有专门的字段来反馈接口成功与否的信息,比如:msg字段,经常好多接口通过该字段反应后台的处理情况,如果成功返回成功信息,失败返回失败原因。...5) 相关接口辅助验证举个例子,比如测试一个删除接口,删除了一条记录后,如何验证接口真的把记录删除成功了,可以再调用查询接口,检查被删除的记录是否真的查询不到了,那就说明删除真的成功了。...msg的值是否为“您没有登录,重新登录”来判断用例是否执行成功。...再展示一用eolink的实现效果:图片2.4 数据库匹配核对针对一个查询类接口,如果想详细验证返回结果的各个字段,可以采用数据库匹配核对方式来断言,用Jmeter工具实现如下:图片图片说明:对于一个查询类用例

90920

字节跳动内部Java技术岗‘面试真题’泄露,冒死发布!

分别介绍。 28、 什么是ThreadPoolExecutor? 29、 什么叫线程安全?servlet 是线程安全吗? 30、 单例模式了解吗?给我解释一下双重检验锁方式实现单例模式!”...请说明为什么? 7、堆栈的区别是什么? 8、简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。 9、MinorGC 10、能不能解释一下本地方法栈?...45、详细介绍Java虚拟机栈?(重点理解) 46、为什么要这样分代: 47、详细介绍Java虚拟机栈? 48、为什么说java是跨平台语言 49、简述分代垃圾回收器是怎么工作的?...32、解释是否有可能将Nginx的错误替换为502错误、503? 33、列举Nginx和Apache之间的不同点 34、Nginx怎么处理请求的? 35、使用“反向代理服务器的优点是什么?...27、解释一下SpringAOP里面的几个名词 28、解释不同方式的自动装配,spring自动装配bean有哪些方式? 29、什么是SpringIOC容器?

1.1K103

带你涨姿势是认识一Kafka Producer

尽管消息的产生非常简单,但是消息的发送过程还是比较复杂的,下图是一个 Kafka Producer 发送消息的过程图,先大致理解一,下面我们进行详细的介绍。 ?...如果写入失败,返回一个错误。生产者在收到错误之后会尝试重新发送消息,几次之后如果还是失败的话,就返回错误消息。...如果 kafka 返回一个错误,onCompletion 方法会抛出一个非空(non null)异常,这里我们只是简单的把它打印出来,如果是生产环境需要更详细的处理,然后在 send() 方法发送的时候传递一个...如果 acks = 1,只要集群的 Leader 接收到消息,就会给生产者返回一条消息,告诉它写入成功。...retries 生产者从服务器收到的错误有可能是临时性的错误(比如分区找不到 Leader),在这种情况,reteis 参数的值决定了生产者可以重发的消息次数,如果达到这个次数,生产者放弃重试并返回错误

69430

Linux TCP RST情况

可能有同学对复位标志“RST”还不太了解,这里简单解释一下: TCP建立连接时需要三次握手,在释放连接需要四次挥手;例如三次握手的过程如下: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入...详情参考这方面的巨著《TCP/IP详解》和《UNIX网络编程》。 前面说到出现“Connection reset”的原因是服务器关闭了Connection[调用了Socket.close()方法]。...大家可能有疑问了:服务器关闭了Connection为什么返回“RST”而不是返回“FIN”标志。...此外啰嗦一,另外还有一种比较常见的错误“Connection reset by peer”,该错误和“Connection reset”是有区别的: 服务器返回了“RST”时,如果此时客户端正在从Socket...移动链路 移动网络,国内是有5分钟后就回收信令,也就是IM产品,如果心跳>5分钟后服务器再给客户端发消息,就会收到rst。也要查移动网络IM 保持<5min 心跳。

5.8K10

(四) MdbCluster分布式内存数据库——业务消息处理

并根据计算结果将消息转发给不同分片节点的 MdbAgent,其会对收到数据进行第一次较验。如果有错,会将消息返回,并带上正确的分片信息。MdbClient收到分片错误回复后,进行消息重定向。...在MdbClient收到slot更新前,其所发出的关于这个slot的消息,都属于错误消息。考虑最大程度减少扩缩容时对正常业务的影响,MdbAgent在返回错误时,带上正确分片的信息。...由于在线消息刚好碰到某个slot锁定的概率(1/16384)较低,即当TPS压力为16384时每秒遇到一条。因此,对于锁定消息,MdbClient直接返回给App,由App进行相关处理。   ...MdbClient会给5个分片分别发送一条查询信息,在分别收到5条返回结果时,MdbClient转发这5条消息给App的dbc驱动。由App的dbc驱动进行数据的汇总。最终,App会收到完整的数据。...消息返回时,拆分条数也跟着带回。dbc驱动根据这个条数就知道需要等待的消息数。   b) 为什么是dbc驱动等待,而不是MdbClient等待?

20940

实战:springboot整合rabbitMQ「建议收藏」

: 5.1先说一RabbitTemplate发送消息的两个方法: sent():Message需要自己构造 (常用) convertAndSent(): message自动序列化发送给MQ...rabbitTemplate.convertAndSend("swl.direct","1",myMap); } } 5.3 登录rabbitMq验证: 发现名为swl.direct的exchage发送给了queue1一条消息...;但是发现内容是一堆乱码(后面第7节解释原因) 6.业务类接受消息: 6.1先看一RabbitTemplate收消息的两个方法:可以看到receive转化为Message,而receiveAndConvert...: 再去mq看发现队列swl.queue1中的消息已被消费,队列变空了 7.更改序列化的方式 7.1为什么为乱码呢?...return new Jackson2JsonMessageConverter(); } } 7.4再次发送数据,发现已经为json格式,除了集合外,实体类也可以 解释一下为什么将我们设置的

30520

Android之Https初识

之后的文章我会在每一环节的阐述中捎带、粗略地解释一下面的内容,还是强烈建议不懂上述内容的同学认真地学一那篇文章。 一、Client 向 Server 提供支持的加密算法 ?...同时,Client 会在本端生成一段随机数作为之后对称加密的私钥,现在来简单解释一下对称加密和 Client 的私钥。...就是使用数字签名技术,现在来简单解释一下什么是数字签名。...上一节中其实已经说了 Client 如何认证证书合法性了,假若证书验证没通过,一般情况程序抛出异常,处理异常时可以选择与 Server 断开连接。...之后会生成一条消息,并将 Hash 串和密文放到消息中发送给 Server。 在消息传递的过程中,解密的私钥只有 Server 才有,所以密文在传输过程中绝对安全。

41720

快速阅读:MongoDB 3.6 新特性

Jesse是MongoDB的一名开发工程师,他在博文中详细讲述了MongoDB 3.6的一些新特性,博文内容小结如下,详细参考原文。...在3.6中,Mathias Stearn 重新设计了一套通信协议,在新的协议中Client和Server均使用同一的OP_MSG消息格式,OP_MSG消息具有很好的扩展性,配合新协议的压缩功能,可以极大地提升网络传输效率...3 自动写重试(Retryable Writes) 试想一,如果客户端执行了一次写操作,但是在读取响应时发生了网络错误,在这种情况客户端应该如何处理错误呢?...3.6 为我们带来了好消息,在这种情况驱动自动重试。服务器端会为每个操作分配一个operation id,并且缓存每个操作的处理结果。在重试时,如果操作已完成,则会直接返回缓存的处理结果。...4 因果一致性(Causal Consistency) 在3.6以前,如果我们先向 primary 节点插入一条数据,然后立即向一个 secondaries 节点查询该条数据,很可能操作失败,因为

92140

接口自动化测试实践指导():接口自动化测试断言设置思路

2) 验证关键字段值 一般接口中会设有专门的字段来反馈接口成功与否的信息,比如:msg字段,经常好多接口通过该字段反应后台的处理情况,如果成功返回成功信息,失败返回失败原因。...4) 数据库匹配核对 要对一个查询类接口的返回数据进行验证,我们可以采用编写SQL,到数据查询结果,然后将数据库结果与接口返回结果进行核对检查,这样就能比较准确的验证接口返回数据的正确性。...5) 相关接口辅助验证 举个例子,比如测试一个删除接口,删除了一条记录后,如何验证接口真的把记录删除成功了,可以再调用查询接口,检查被删除的记录是否真的查询不到了,那就说明删除真的成功了。...该用例通过检查接口返回字段msg的值是否为“您没有登录,重新登录”来判断用例是否执行成功。...再展示一用eolink的实现效果: 2.4 数据库匹配核对 针对一个查询类接口,如果想详细验证返回结果的各个字段,可以采用数据库匹配核对方式来断言,用Jmeter工具实现如下: 说明: 对于一个查询类用例

73310

RocketMQ消息发送常见错误与解决方案

查询路由信息时能返回路由信息。...消息发送者在消息发送时首先会查本地缓存,如果本地缓存中存在,直接返回路由信息。 如果缓存不存在,则向Nameserver查询路由信息,如果Nameserver存在该路由信息,就直接返回。...经过上面的步骤,基本就能解决该错误。 2、消息发送超时 ---- 消息发送超时,通常客户端的日志如下: ?...通常情况超时通常与Broker端的处理能力关系不大,还有另外一个佐证,在RocketMQ broker中还存在快速失败机制,即当Broker收到客户端的请求后会将消息先放入队列,然后顺序执行,如果一条消息队列中等待超过...200ms就会启动快速失败,向客户端返回[TIMEOUT_CLEAN_QUEUE]broker busy,这个在本文的第3部分会详细介绍。

5.7K21
领券