科技新闻

007. 服务间通信 RPC & REST over HTTP(s) & 消息队列

 ̄綄美尐妖づ 提交于 2020-03-03 08:44:56
服务间通信     服务间通信的几种方式: RPC、REST over HTTP(s)、消息队列。      https://www.jianshu.com/p/2a01d4383d0b      RPC      https://blog.csdn.net/weixin_42672054/article/details/81708464#commentBox   创建WebService工程   1.RPC允许程序调用另一个地址空间的过程或函数,而不需要显式编码这个远程调用的细节。     在底层去看,RPC其实就是将流从一台计算机传输到另外一台计算机,无论是基于传输协议(http、tcp、udp等等)和网络IO(bio、nio)来实现。   2. RPC的基本特点如下: 通过网络传输的 跨终端、跨平台的 基于请求-响应的 只调用过程,不需关注细节       3.常见的RPC技术      https://blog.csdn.net/chen213wb/article/details/80330356 WebService (现在基本不使用) 跨语言的,基于SOAP协议,基于xml数据或json数据 SOAP WebService: JAX-WS restful WebService: JAX-RS SpringCloud Spring的,基于Socket的

HTTP探索之初学乍练

戏子无情 提交于 2020-03-03 08:02:36
一、什么是HTTP? Hypertext Transfer Protocol(HTTP)协议(RFC7230) 一种无状态的、应用层、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。 二、HTTP请求行与响应行 请求行格式(ABNF方式描述) Request-line = method SP request-target SP HTTP-version CRLF HTTP常见方法(RFC7231) GET:主要的获取信息方法,大量的性能优化都针对该方法,幂等方法 HEAD:类似GET方法,但服务器不发送BODY,用以获取HEAD元数据,幂等方法 POST:常用于提交HTML FORM表单、新增资源等 PUT:更新资源,带条件时是幂等方法 DELETE:删除资源,幂等方法 CONNECT:建立tunnel隧道 OPTIONS:显示服务器对访问资源支持的方法,幂等方法 TRACE:回显服务器收到的请求,用于定位问题。有安全风险 Request-target origin-form:后端请求资源的路径,为空时传递/ absolute-form:用于正向代理 authority-form:用于CONNECT方法 asterisk-form:用于OPTIONS方法 HTTP-version 版本号发展历史 HTTP/0.9:只支持GET

异步专题

时间秒杀一切 提交于 2020-03-03 07:58:15
同步与异步 /* 同步异步是什么: 同步和异步是一种消息通知机制 同步阻塞: A调用B,B处理获得结果,才返回A A在这个过程中,一直等待B结果,没有拿到结果之前,需要A(调用者)一直等待和确认调用结果是否返回,拿到结果,然后继续再执行下去. 做一件事,没有拿到结果之前,就一直等待,一直等到有结果了,再去做下面的事. 异步非阻塞: A调用B,无需等待B结果,B通过状态,通知A或回调函数来处理. 做一件事,不用等待事情的结果,然后就去忙别的了,有了结果,再通过状态来告诉B,或者通过回调函数来处理. 生活例子 小明去图书馆借书,和管理员说找那本书,管理员就去一本本查,查完之后才告诉小明,有没有这个书; 小明A 图书馆管理员B 查的这个过程需要时间,所以 同步 -> 在管理员找到或者找不到的过程中,不回去通知小明,需要小明'一直'去问他结果 异步 -> 在管理员找到之后,就会'通知方式'去告诉小明,所以小明可以继续干别的事,等待通知管理员通知就行; */ { // 同步:阻塞 function test(){ console.log("test..."); } test(); console.log("end..."); // 代码执行过程: test... -> end... 因为他们是一步一步向下执行的; } { // 异步:非阻塞 // 在JS中非常典型的 异步函数 :定时器

Socket网络编程学习笔记

牧云@^-^@ 提交于 2020-03-03 05:57:29
1 服务器 发送消息和接受消息的代码 namespace Socket_编程_tcp协议_服务端 { class Program { static void Main(string[] args) { //1.创建服务端socket类 Socket tcpServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //2.绑定IP和端口号 192.168.155.1 IPAddress ipaddress = new IPAddress(new byte[]{192,168,155,1}); EndPoint point = new IPEndPoint(ipaddress,7788); //ipendpoint是对ip+端口号做了一次封装的类 tcpServer.Bind(point); //这是向操作系统申请一个可用的ip跟端口号 用来做通信 //3.开始监听等待客户端做连接 tcpServer.Listen(100); //参数是最大连接数 Console.WriteLine("开始监听"); Socket clientSocket = tcpServer.Accept(); //暂停当前线程,直到有一个客户端连接过来,之后进行下面的代码 /

[QQAI机器人]-爬虫机器人

﹥>﹥吖頭↗ 提交于 2020-03-03 05:06:38
简述 爬虫是什么 爬虫就是按照一定的规则来抓取我们想要的数据 例如 我可以获取我的博客博文以及连接 按照设定的规则来爬数据 智能机器人是什么 例如我们现在要用的QQ机器人 他可以按照你的规则来回复你的消息 你可以和他聊天 也可以让他把你去办某些事情 例如 你可以问他 我的快递到哪了 ,他就会回复你快递的信息 功能实现 环境配置 JCQ的环境配置这里就不说了,这里直说怎么去实现 [QQAI机器人]-使用Java开发环境搭建 配置好完成后,使用里面的 Maven Demo 导包 jcq-coolq:JCQ开发工具包 jsoup:爬虫包 < dependency > < groupId > com.sobte.cqp </ groupId > < artifactId > jcq-coolq </ artifactId > < version > 1.2.7 </ version > </ dependency > < dependency > < groupId > org.jsoup </ groupId > < artifactId > jsoup </ artifactId > < version > 1.11.3 </ version > </ dependency > 开始编写程序 AppDemo.java:程序主类 JsoupMapping.java:爬虫运行类

文本分析

戏子无情 提交于 2020-03-03 04:51:51
jieba库 jieba是优秀的中文分词第三方库 ,具体使用方法如下 import jieba test_str = ' 新华网东京记者据日本共同社28日报道' test_str = test_str . strip ( ) result = jieba . cut ( test_str , cut_all = False ) #print(result)打印为可迭代的生成器 print ( ' ' . join ( result ) ) 运行结果如下所示: import jieba seg_list = jieba . cut ( "我来到北京清华大学" , cut_all = True ) print ( "全模式:" + "/" . join ( seg_list ) ) #全模式 seg_list = jieba . cut ( "我来到北京清华大学" , cut_all = False ) print ( "精确模式:" + "/" . join ( seg_list ) ) #精确模式 seg_list = jieba . cut ( "他来到了网易杭研大厦" ) #默认是精确模式 print ( "默认模式:" + "/" . join ( seg_list ) ) seg_list = jieba . cut_for_search (

redis

拥有回忆 提交于 2020-03-03 03:46:59
Redis是什么 基于键值的高性能存储服务器 可做于缓存数据库使用 数据结构存储 消息中间件 Redis优势/特点 最大的亮点就是速度快,因为数据存在内存中。Redis读的数度是110000次/s,写的数度是81000次/s。(,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)) 支持丰富的数据结构存储。 Redis的所有操作都是原子性。多个操作也支持原子性,(通过MULTI和EXEC指令包起来。) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除 持久化数据 数据类型 常用: 1、String:是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。 命令:get、set、mget批量获取多个key值(mget name name2 name3 。。。)、incr && incrby 对key对应的值进行加加操作 decr 减减 2、Hash:键值对集合,是一个String类型的field和value的映射表,适合用于存储对象 命令:hset、hget、hgetall。 3、List:链表(底层是双向链表,对两端的操作性能很高,通过下标查询性能很低。按插入顺序排序) 命令:lpush头部添加一个元素

二进制协议 vs 文本协议

六月ゝ 毕业季﹏ 提交于 2020-03-03 03:39:29
二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互。这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法。 1 二进制协议 目前在公司做服务器后台开发的工作,需要多个服务程序进行交互。因为是TCP直连,所以直接采用二进制消息的方式。消息的定义统一采用消息头(消息ID+消息长度)+x消息体(消息内容)的方式,所以扩展是比较方便的。用代码表示如下 struct CommonMsg { uint32_t m_msgId; uint32_t m_msgLen; }; struct KeepAlive:public CommonMsg { uint32_t m_timeStamp; }; doRead() { CommonMsg * msg=(CommonMsg*)buffer; if(msg->m_msgId==ID_KEEP_ALIVE) { handleKeepAlive(msg); } } 1.1 优点 二进制协议有以下几个优点: 1. 节约内存,带宽。 二进制协议只保存了必须的信息,在需要传递大量信息的时候,对于带宽的节省是非常明显的。 2. 方便加密。 二进制协议很方便使用异或 或者压缩的方式进行加密,防止协议被破解,从而保护了传递的信息,增加协议破解的难度。 1.2 缺点

Redis面试总结

做~自己de王妃 提交于 2020-03-03 02:40:15
1、什么是Redis? 是非关系型数据库,分布式缓存,用来存session,性能高,速度快,key-value形式存储 2、支持的数据类型 key-value、String、set、list、hash、zset 3、应用场景 缓存 需要实时变化和展示的功能,用redis操作 消息队列 4、 来源: CSDN 作者: ren_luxia 链接: https://blog.csdn.net/ren_luxia/article/details/104613723

KafkaConsumer 长时间地在poll(long )方法中阻塞

大憨熊 提交于 2020-03-03 02:16:36
一,问题描述 搭建的用来测试的单节点Kafka集群(Zookeeper和Kafka Broker都在 同一台Ubuntu 上),在命令行下使用: ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic topicForTest 创建了一个3个分区的Topic如下:(Topic名称为 topicForTest) 使用 Console producer/consumer都能够正常地向topicForTest发送和接收消息: bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topicForTest bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicForTest --from-beginning 但是在自己的windows 机器的开发环境下,使用kafka client JAVA API (0.10版本)中的KafkaConsumer 却无法接收消息,表现为:在poll()方法中阻塞了。 更具体一点地,是在:org.apache.kafka