webSocket "onsend"事件?



在使用io.connect()的JavaScript中的HTML页面中,有没有办法捕获任何"onsend"事件?

我在不同的地方使用了很多"socket.send()",我需要"分类"并记录它们,如果我可以在"onsend"事件之类的东西中捕获它们(当我收到一些东西时,比如socket.on("message")...

我当然意识到我可以在全局函数中做到这一点,但由于解决方案是按原样编码的,因此需要大量重新编码才能做到这一点,并且重新测试不是一种选择......

啪!

如果其他人正在寻找答案,我将发布我正在使用的解决方法,可能并非在所有情况下都有效:

let socket = new WebSocket(wsUrl)
let original = socket.send
socket.send = (...args) => {
  doSomethingOnSend()
  return original.apply(socket, args)
}

您正在使用 socket.io 的默认事件来发送和接收消息。

这意味着,如果您从服务器向客户端发送消息,则使用

//On server side or server side
socket.send(someMessage);
//On another opposite side
socket.on("message", function(data){console.log(data);})

上述一种事件是内置在 socket.io 库中定义的。那是在他们的代码中的某个地方,例如

//On server side or client side
socket.send = socket.emit("message", someMessage);
//On opposite side
socket.on("message", function(data){console.log(data);})

因此,通过这种方式,我总是定义我的自定义事件,例如

//register a custom events on socket using socket.on function
socket.on("clientSentAData", function(data){console.log(data);})
//Client knows that there is a kind of evnets known as "clientSentAData" in the server side
//So client emit an data using "clientSentAData" event.
socket.emit("clientSentAData", data);

我这样我也对我的 bla bla 类型的消息/通知/数据进行分类。

更具体的例子

//Server code
//Server register the sendMeMusicFile event
socket.on("sendMeMusicFile", function(tileName){
    console.log("Received client request file with title " + tileName);
    socket.emit("takeYourMusicFile", theMusicFile);
    console.log("Sent music file with title " + tileName);
    });

//Client Code 
//Ask for a music
socket.emit("sendMeMusicFile", "Just Give me a reason");
//Client register the takeYourMusicFile event
socket.on("takeYourMusicFile", function(theMusicFile){
    console.log("Received music file with title " + theMusicFile.tile);
        // player.play(theMusicFile)
    });

相关内容

  • 没有找到相关文章

最新更新