在代理服务器上修改WebSocket发送的消息

cu6pst1q  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(182)

我创建了一个代理服务器(node-http-proxy)来将WebSocket连接重定向到另一个websocket服务器,如下所示:
WebSocket客户端<----->代理<----->websocket目标服务器
为了控制从客户端发送到服务器的消息,我想知道哪些消息被发送到服务器,并做一些过滤。我发现以下代码可以帮助我获取已发送的消息,但我无法过滤不需要的消息(例如“你好”)。在将消息发送到目标服务器之前,是否可以使用其他方法(或包)来添加一些逻辑?

proxy.on('proxyReqWs', function(proxyReq, req, socket, res, options) {
    var parser = new WsParser(0, false);
    socket.pipe(parser);
    parser.on('frame', function (frame) {
        // handle the frame
        console.log('Up:',frame);
        console.log('Up data:'+frame.data);
    });
});

字符串

xn1cxnb4

xn1cxnb41#

我发现的最好但不太好的解决方案是阅读这样的消息https://github.com/http-party/node-http-proxy/issues/1632
然后检查方法名以调用.end(),如:

proxy.on('proxyReqWs', (proxyReq, _req, clientSocket, _res, _options) => {

clientSocket.on('error', (error) => {
    console.error(`Client socket error:`, error)
})

clientSocket.on('close', (hadError) => {
    console.log(`Client socket closed${hadError ? ' with error' : ''}.`)
})

const perMessageDeflate = new PerMessageDeflate({ serverMaxWindowBits: 10, clientMaxWindowBits: 10 }, false)
perMessageDeflate.accept([{}])
const receiver = new Receiver({ isServer: true, extensions: { 'permessage-deflate': perMessageDeflate } })
clientSocket.pipe(receiver)

receiver.on('message', (message) => {
    console.log(`Client wrote >>>> ${message.toString()}`)
    let parsedMsg = JSON.parse(message);
    let blockMethodNames = ['method_name_to_block'];
    console.log(`Client called >>>> ${parsedMsg.method}`)
    if (blockMethodNames.indexOf(parsedMsg.method) > -1) {
        clientSocket.end();
    }
})
})

字符串

相关问题