【问题标题】:How to discard incoming event in Socket.io-client如何丢弃 Socket.io-client 中的传入事件
【发布时间】:2021-04-11 19:50:33
【问题描述】:

您好,我正在尝试制作一个跟踪器应用程序,并且我正在将 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 可以吗?

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

【问题讨论】:

    标签: node.js reactjs sockets socket.io volatile


    【解决方案1】:

    ? 不回复传入的套接字可以很容易地丢弃它

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多