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

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

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

  1. proxy.on('proxyReqWs', function(proxyReq, req, socket, res, options) {
  2. var parser = new WsParser(0, false);
  3. socket.pipe(parser);
  4. parser.on('frame', function (frame) {
  5. // handle the frame
  6. console.log('Up:',frame);
  7. console.log('Up data:'+frame.data);
  8. });
  9. });

字符串

xn1cxnb4

xn1cxnb41#

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

  1. proxy.on('proxyReqWs', (proxyReq, _req, clientSocket, _res, _options) => {
  2. clientSocket.on('error', (error) => {
  3. console.error(`Client socket error:`, error)
  4. })
  5. clientSocket.on('close', (hadError) => {
  6. console.log(`Client socket closed${hadError ? ' with error' : ''}.`)
  7. })
  8. const perMessageDeflate = new PerMessageDeflate({ serverMaxWindowBits: 10, clientMaxWindowBits: 10 }, false)
  9. perMessageDeflate.accept([{}])
  10. const receiver = new Receiver({ isServer: true, extensions: { 'permessage-deflate': perMessageDeflate } })
  11. clientSocket.pipe(receiver)
  12. receiver.on('message', (message) => {
  13. console.log(`Client wrote >>>> ${message.toString()}`)
  14. let parsedMsg = JSON.parse(message);
  15. let blockMethodNames = ['method_name_to_block'];
  16. console.log(`Client called >>>> ${parsedMsg.method}`)
  17. if (blockMethodNames.indexOf(parsedMsg.method) > -1) {
  18. clientSocket.end();
  19. }
  20. })
  21. })

字符串

展开查看全部

相关问题