您的位置:首页 > 运维架构 > 网站架构

浅谈手机微服务架构

2019-01-20 12:06 323 查看
版权声明:转载请注明出处 https://blog.csdn.net/qq_39969226/article/details/86560807

client-server:移动Http server

本文是自己写下来,以便于了解相关知识和加深印象。
思考一个问题:我以前很好奇那些业务关于“wifi传文件/手机热点传文件”是怎么让2个手机设备之间进行通信的。然后我搜索了一下相关资料,大致了解了一下,这种就属于手机微服务架构。

举例:对于天气预报的应用,手机(客户端)会对用户所在地区,提交给服务器,然后服务器会将地区筛选
并将当地天气信息提取出来返回给客户端(手机)。这种情况下,“应用”就是一个客户端。
但是App!=Client。
客户端和服务端是相对的概念。

具有提供Service的能力的App:
当你的应用依赖一个服务提供者的时候,那么应用就是客户端的角色。
而有些场景下应用是能够向其他设备提供服务的。例如QQ面对面传输文件、Wifi传输文件。
这样2部设备就可以相互传输文件,其本质是在App内架设一个微型的Server.一个设备通过访问另一台设备的
Server进行文件互传。所以App不只是单纯的客户端角色,他们还充当着Server的角色。
核心:可通过开源框架解决(本质也是http server的微架构)
实践功能:1.设计并实现一个http server微架构。
2.实现App内置网页访问的功能。
3.实现Wifi传图的功能。

其实也很容易理解,你想想,比如QQ面对面,为什么同时打开,2个手机中,1个是有个雷达效果的等待扫描,1个是发现对方的头像并可以进行传输文件。其实这就是server和server的通信。即1个手机充当着client的角色,另一个手机充当着server的角色。充当server角色的设备向client角色的手机设备提供文件。原理底层还是Socket通信,建立一个可用的端口,进行socket来连接。再通过socket的getoutputstream()和getinputstream()来返回传输的文件流。【这个大致过程就是手机的微服务架构】。前提是2个设备处于同一个网段。

基本原理我们大致了解后,我们来看看到底socket是怎么通信的:
一些基本概念与知识:
1.传输协议与应用层协议概念
2.Java socket基础
3.Get与Post协议格式
4.开发机与模拟器网络调试工具与配置
关于协议的解释:
HTTP协议参考:https://www.geek-share.com/detail/2682420020.html
FTP协议参考:https://baike.baidu.com/item/ftp/13839?fr=aladdin
SMTP协议参考:https://baike.baidu.com/item/SMTP/175887?fr=aladdin
XMPP协议参考:https://baike.baidu.com/item/XMPP/3430617?fr=aladdin
POP协议参考:https://baike.sogou.com/v11029965.htm?fromTitle=pop协议

  1. 首先我们应当了解一下传输通信的相关协议的基础知识:

    TCP的特点:

    UDP的特点:

    TCP面向连接的“3次握手,4次挥手:”
    我的PPT上写的很清楚了,就不再进行过多的介绍。

  2. TCP与UDP的抉择:

  3. Socket的大致用法流程:
    物理电脑主机充当着client角色,在cmd中,使用telnet来远程进行connect手机上的端口【前提是保持2者在同一wifi下】,通过telnet ip 端口号的格式来进行通信。
    然后对于手机,编写socket代码,充当服务端【微型服务器http server】,然后就是java中的socket写法了。
    java中的serverSocket的写法是建立serverSocket对象,并对端口进行绑定。此处绑定的是interSocketAddress,因为port端口是由配置传进来的,由java bean(Model)层进行传MainActivity设置的端口号。最后调用ServerSocket的accept()方法等待连接。【accept()是个阻塞方法。连接成功后,这个方法会返回远端连接好的socket对象(这个对象包含client的相关信息,通过这个对象进行getInputStream()和getOutPutStream()进行数据传输通信】。最后我们在线程池中调用如下自定义函数。app程序就可充当微型服务器,向电脑(充当client)传输我们写入的自定义函数下面write()方法中的字符串。【参数为byte.java可以通过string.getBytes()进行转换】
    这样,就算是能够进行基础的远程监听连接的端口。
    此处建立一个线程池是为了做后续的处理,发现一个返回连接的socket就把它加入线程池并进行处理,这样就可以继续进行while循环,去和下一个远端的socket连接,实现源源不断的监听效果。

  4. 手机微服务架构的开发环境配置:

最后,提一下关于有些问题的解决方案,提供参考:

  1. telnet:
    telnet ip 端口号:查看端口是否可用。
    如果连接失败,或者telnet不是内部或者外部命令,就检查
    telnet功能是否被打开,有还不行的话,就查看“服务”里面的telnet服务是否启动。
    相关命令:
    netstat -ano:查看当前windows中所有的端口。
    netstat -ano|findstr 端口号:查看这个端口所占用的PID
    tasklist|findstr “端口对应的PID”,回车,查看是哪个进程或者程序占用了这个端口
    taskkill /pid (进程号) /f:停止端口占用,或者在任务管理器中找到端口对应的进程并将该进程杀死。
    有时候还是不能连接该端口,那么我们就需要配置防火墙的入站规则和出战规则:
    下面演示入站规则,出站同理:









    如果还是不能连接, 抱歉,本人才疏学浅,请自行百度(应该还需要配置端口的服务。看看服务端是否开启了远程服务)。。。
    端口区分于服务:
    就像寄东西找快递,快递即服务,应用提供服务需要端口,端口号即快递需要送到哪个门牌号,门牌号(端口)提供唯一标识。
  2. 模拟器:需要一些配置,需要端口的映射。因为模拟器不能通过127.0.0.1这样的ip来访问电脑。而是通过ip:10.0.2.2 来访问电脑主机开发机。开发机访问模拟器是通过未被占用的端口。前提是需要对端口进行端口映射,telnet localhost 5554,看该端口是否可用,然后redir add tcp:8088:8088.这样就可以访问电脑本机的8088端口,就i相当于访问了模拟器的8088端口。
  3. 真机:保证电脑主机和手机处于同一网段下,在cmd中进行telnet ip 端口号,测试端口号是否可用。或者ping一下,看ping的通不。ip可以通过ipconfig查看,注意这里不能用localhost,因为cmd中的localhost指向的是电脑本机,而不是手机。这里的Ip是wifi下的ipv4,例如:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: