如何丢弃 Socket.io-client 中的传入事件

问题描述

嗨,我正在尝试制作一个跟踪器应用程序,我正在为服务器和客户端使用 socket.io。在我的客户端应用程序中,每当我的浏览器不在焦点上时,我都想忽略 message 事件。我的客户端应用程序代码是这样的:

const socket = io('http://localhost:4000');
const [browserState,setbrowserState] = useState('');
  useEffect(() => {
    socket.on('connect',() => {
      console.log('connected');
      socket.on("message",payload => {
        //payload need to be passed to Map component
        console.log(payload);
      });
    });
  },[]);

  useEffect(() => {
      document.onvisibilitychange = function(){
        setbrowserState(document.visibilityState)
      }
      if(browserState === 'hidden') socket.volatile.emit("message",payload => payload)
  },[browserState]);

而在我的服务器上只是:

io.on('connection',socket => {
    socket.on('message',(payload)=>{
        console.log(payload)
        io.emit('message',payload)
    });

问题出在代码 socket.volatile.emit("message",payload => payload) 的客户端。如果我使用 socket.volatile.on 它工作。但我仍然在客户端收到 message 事件。如果我使用 socket.volatile.emit,服务器就会崩溃。

附加问题:如果我的客户端 io.protocol = 5 和我的服务器是 io.protocol = 4 可以吗?

我真的很陌生。请指教。 :) 谢谢!

解决方法

? 它可以通过不回复传入的套接字轻松丢弃

io.on('connection',socket => {
    socket.on('message',(payload)=>{
        console.log(payload)
        // removed this line io.emit('message',payload)
    });