-
阅读源码要点到即止,分析完了主线流程,细节代码靠自己看了查看全部
-
流程梳理: 把数据库的数据先清空 启动服务器端,跑一下客户端,建立了一个连接,分析客户端日志,有连接,注册,登录,注意顺序刚好相反的 分析服务器端日志,首先服务端收到消息,初始化连接消息,然后相应客户端消息,接着有注册消息,里面有密码和用户名,处理完之后返回result给客户端,下面收到登录相关信息,返回认证方式给客户端,客户端再请求认证一次,验证账号密码,生成一个result给客户端登录成功,客户端会再请求联系人,客户端又告诉服务端在线 推送消息的过程分析: 点击发送消息按钮的时候,查看打印日志,调用sendBroacast()方法,发送一个IQ,封装了消息的内容 在客户端监听器收到消息,发送一条广播,接收器reciever方法里面根据消息的内容生成一个通知栏显示在手机上查看全部
-
login登录方法结束了之后,注册一个packetListner,用于监听接收服务端推送过来的消息;身份验证过程结束了! 客户端如何接收服务端推送过来的消息呢? 服务器又是怎么把消息推送到客户端的呢?查看全部
-
服务端相应了客户端的注册请求,现在客户端怎么处理返回的数据呢? PacketReader会去处理,是在XmppManager的之前添加的监听回调处理,把用户名和密码存储到sp文件中 判断是否已经注册过,通过判断sp文件是否保存了用户名和密码 下一步任务就是登陆任务 几种登陆方式呢?SASL NonSASL 获取服务器的认证协议方式,自己设置方式 接受服务器发过来的方式有两种: Collector和Listner 一种阻塞,一种非阻塞 登陆数据IQ请求发送到服务端后,查看IQAuthHndler类代码 判断查询模式是不是get,经过逻辑处理生成replay对象,写给客户端 客户端获取数据,经过处理,再发送数据给服务端,查询模式这次是set的,服务端这次开始认证,一种是明文,一种是加密 其实登录过程大概是这样,客户端生成随机用户名和密码,发送给服务端,服务端在数据库的表添加一条新的记录,通知客户端,客户端本身也保存用户名和密码,客户端再次请求登录认证,服务端通过比较数据库的密码和客户端发送过来的密码是否相等,来判断是否登录成功,修改在线状态,通知客户端成功了,这样推送消息的时候,只会发给在线状态的客户端查看全部
-
上一节,分析了客户端怎么写数据给服务端 这节分析服务端的收发消息的handler类 XmppIoHandler 根据客户端发送的消息是否符合xmpp协议,做出相应数据相应,数据也是xmpp协议格式 客户端的PacketReader也会读取返回的数据,这样交互之后,初始化连接就建立好了 客户端下一个任务就是注册任务,用户名和密码是随机生成的,推送服务不需要用户手动注册 Packet类 留意它的子类,都是xmpp的协议对象,例如IQ;父类封装公共属性,例如id,type,to,from等等,子类封装自己的属性;其实就是封装xmpp协议成对象 注册对象添加监听器,发送数据,监听服务器返回的数据,判断注册任务是否成功 每次发送数据都是封装在packet,并且是放到数据队列 客户端的注册数据发送之后,接下来分析服务端的handler的process方法怎么处理数据的查看全部
-
XmppManager类的查看 start()方法 login之前先注册,注册要先连接,也就是连接,然后注册,最后登录 连接是通过asmack库代码执行 XMPPConnnection,内部就是创建socket对象连接服务器,为什么这里不用mina框架呢,因为客户端对mima框架依赖不强,服务端性能要求高才需要框架,所以这里直接用socket 初始化连接的reader和writer对象,用于读写 封装成PacketReader和PacketWriter 在packetreader里面通过pull解析,最后两个都调用startUp(),启动线程 在packetWriter里面要开始拼接xmpp协议的相关内容,先是stream请求,接着循环发送数据给服务器,数据是不停的从一个队列获取查看全部
-
客户端源码分析: 找到启动的首个activity,会看到创建ServiceManager对象,加载配置文件,把参数写入sp共享偏好文件,最后启动这个service,是在子线程执行的,但是没有意义的,因为安卓的service还是在主线程执行的查看全部
-
之前说的都是过滤器,现在说说handler 主要用来管理会话,收发消息。不熟悉的可以看mima之前的视频查看全部
-
编码器的方法都是空的,因为数据本身已经加密过了,发送数据都要经过Connection这个类来发送,deliver()等等查看全部
-
解码器解析的数据是用xml解析器查看全部
-
解码器用的是内容累加的解码器,防止数据丢失查看全部
-
spring注入mina框架的服务端NioSocketAcceptor,完成mima框架的四部配置,不用写一句代码查看全部
-
关于springMVC可以参考 http://jinnianshilongnian.iteye.com/blog/1594806 每一个bean在启动tomcat的时候都会由spring创建了对应的对象 查看通知控制器这个类,会创建一个NotificationManager,这里面又创建一个NotificationService,里面又创建XmppServer,并且调用启动推送服务start()方法,通过spring的配置文件启动查看全部
-
简单说明,例如请求是index.do,请求的页面应该就是index.jsp 后台首页的头部和尾部怎么来的,查看配置文件decorators.xml,里面说明了装饰页面是default.jsp,查看该页面发现指定两个页面,分别是header.jsp和footer.jsp,还指定了index,user,seesion,notification四个标签。具体的body内容,是根据标签的选择,加载不同的jsp页面 user.do是根据userController类处理的,这个不是spring提供的,是自己写的。 这个类的构造函数,获取了一个userService对象,能够获取所有用户,判断是否在线等等。 ModelAndView 这个类用来指定展示哪个jsp页面,看源码可以知道指定的是user/list这个页面查看全部
-
懂SSH最好,不懂的话,了解执行流程也可以 如何阅读源码,郭神给的建议是,点到即止。主要看方法名和注释。熟悉之后再精度源码 安卓客户端的asmack源码下载下来,在github搜索下载编译好的jar包,版本不需要太新,很多功能用不到,0.8.10版本。在eclipse删掉asmack包,新建一个资源文件夹,把下载的asmack源码复制进来,这样就可以分析asmack源码了。 struts spring hibernate 三大框架 struts mvc spring 依赖注入,切入编程 hibernate 对象关系映射 服务端没有用到struts,只用到spring,hibernate 什么是mvc? 查看web-inf下面的web.xml文件 ,会看一个dispathcer配置,使用的是spring的类DispatherServlet,每一个请求都经过它的转发,再查看配置文件dispatcher-servlet.xml,里面映射了不同的请求对应的处理类,如下: <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /user_api.do=userapiController /notification_api.do=notificationapiController /index.do=filenameController /user.do=userController /session.do=sessionController /notification.do=notificationController </value> </property> <property name="order" value="1" /> </bean>查看全部
举报
0/150
提交
取消