【问题标题】:How to make nodejs websocket request/response synchronized如何使nodejs websocket请求/响应同步
【发布时间】:2017-10-21 15:44:23
【问题描述】:

当 websocket ws.send(msg)ws.on('message', ...) 附带时,我在 nodejs 中实现同步编程模式时遇到问题。我在下面的伪代码 sn-p 中描述了我的要求。

ws.on('message', (data) => {
    let msg = JSON.parse(data)
    if (msg.MsgType == 'DummyResponse') {
        // we got one response and we need to send it to the 
        // corresponding RequestID's getResponse() function
        requestMap.get(msg.RequestID).unblockingGetResponse(msg)
    }
}   

async ctx => {
    ctx.body = await ws.send({MsgType:'DummyRequest', RequestID: uuid()}).getResponse()
}

我的 nodejs package.json 依赖

"dependencies": {
    "koa": "^2.2.0",
    "koa-router": "^7.1.1",
    "uuid": "^3.0.1",
    "ws": "^3.0.0"
}

我的问题是如何在 es6/7 中正确实现这个?

【问题讨论】:

    标签: javascript ecmascript-2017


    【解决方案1】:

    我用这个模式解决了这个问题:

    let resolveMap = new Map()
    
    ws.on('message', (data, flags) => {
         let response = JSON.parse(data) 
         resolveMap.get(response.requestId)(response)
         resolveMap.delete(response.requestId)
    }
    
    async function() {
        //...
        let response = await new Promise((resolve, reject) => {
            resolveMap.set(request.requestId, resolve)
            ws.send(request)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多