之前对于Promise相当不了解,同步等待函数都是用的其他的库,后面发现es原生的Promise其实完全可以支持同步等待操作,以此记录,希望后面人少走弯路。
promise
Promise的参数是一个函数,函数就是要等待执行的什么内容,这个函数的参数有两个,一个是resolve,一个是reject。通过主动调用resolve就可以控制promise的结束。
Promise(funciton(resolve, reject){
resolve();
async/await
es6有了一个新的关键字 await/async,可以达到编写同步代码的目的。比如等待时间到了执行后面的内容就可以写成
async waitOneSecondToExe(){
await setTimeout(function(){}, 1000);
doSomething();
await同步等待的内容是一个Promise对象,当然不是Promise对象await也不会报错,但是也没有任何作用了。
同步等待一个回调函数
await一个函数好理解,但是await一个回调函数怎么办呢。我现在想等待websocket返回结果再执行后面的内容如何做呢?
function recvData(){
socket.on("recvData", function(data){
console.log(data);
doSomething();
如上面的代码肯定是不行的,recvData中的socket.on函数仅仅是进行了注册,我的期待是doSomething在socket接收到数据后才执行,那么怎么办呢?
async function recvData(){
await new Promise((resolve) =>
socket.on("recvData", function(data){
console.log(data);
resolve();
doSomething();
通过主动调用resolve函数,会把Promise内部的状态设置为已完成,await等待的Promise就会得到结果,执行下面的程序内容。达到同步等待会调函数的目的
开始学习nodejs,并不懂很多东西的使用,尤其是websocket这个东西。通过网上搜索发现websocket是异步并且没有同步接口。这个就让人很头疼,因为我做的项目需求必须整个流程达到同步效果。经过长时间的查找,居然发现了一个类似于c++里面signal的库,真的是让我欣喜若狂,而且使用很方便,下面介绍一下这个库和使用方法。库路径:https://github.com/akira-...
#include <assert.h>
#include "Poco/Net/WebSocket.h"
#include "Poco/Net/HTTPClientSession.h"
#include "Poco/Net/HTTPRequest.h"
#include "Poco/Net/HTTPResponse.h"
#include "Poco/Net/ServerS...
socket.io-promise
使用承诺的事件扩展 socket.io。 当您需要在指定时间内从 socket.io 客户端回复时非常有用。 指定超时后,套接字将自动解除绑定 'pong' 事件处理程序。
示例 1。
var socketio = require ( 'socket.io' ) ,
socketiosocket = require ( 'socket.io/lib/socket' ) ,
promise = require ( 'promise' ) ( socketiosocket ) ;
io . sockets . on ( 'connection' , function ( socket ) {
socket . giveme ( 'pong' , function ( pongMessage ) {
// > { sta
一个客户端库,带有用于浏览器和Node.js的基于的API。
import WebSocketAsPromised from 'websocket-as-promised' ;
const wsp = new WebSocketAsPromised ( 'ws://example.com' ) ;
await wsp . open ( ) ;
wsp . send ( 'message' ) ;
await wsp . close ( ) ;
全球Promise构造函数
npm i websocket-as-promised --save
前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。
因此,一种新的通信协议应运而生—websocket,他最大的特点就是服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了真正的平等。
websocket其他特点如下:
1. 建立在 TCP 协议之上,服务器端的实现比较容易。
2. 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 H
当业务量上升后,由于mysql对全文检索或模糊查询支持的能力不强,在系统中查询的地方,往往会出现慢sql等,拖累系统其他模块,造成性能低下。
随着ES使用普及率的升高,ES是mysql的一个有效补充。我们可以将数据发送到搜索引擎(如ES)上,由搜索引擎来提供专业的服务。
接下来,就结合工作中实际用到的场景,对数据从mysql到es的同步进行一些分析。
在实践中我总结出了以下几种方式。
第1种:同步双写
这是一种比较简单的方式,就是在将数据写入到MySQL的时候,同时将数据写入到ES,实现数据的双写
1.TCP协议的三次握手与四次挥手
(1)TCP连接建立过程中采用“三次握手机制”
第一次握手:客户端发出连接请求报文段,其中将SYN标志位置为1表示要建立连接,选择一个初始序列号seq=x,不携带数据但消耗一个序号。之后TCP客户进程进入SYN-SENT(同步已发送)状态。
第二次握手:服务器收到连接请求报文段后,如同意建立连接,向客户端发送确认。在确认报文段中将SYN位和ACK位都置1,确认号是ack=x+1,选择一个初始序号seq=y,不携带数据但消耗一个序号。TCP服务器进程进入SYN-RCV
遵循RFC6544协议的通信协议。Webcoket协议和http协议属于并行关系,但是websocket是以http协议为基础开发出来的(微软用IhttpHandler接口中同时处理这两种协议),同时他们都是以TCP协议为基础。可以进行双向通信、持久化通信。Http是单向通信协议、无状态通信。
websocket协议(握手部分):
GET /chat HTTP/1.1
Host: http://server.example.com
Upgrade: websocket
Connection: