【问题标题】:Typescript: Property 'leave' does not exist on type 'Socket'打字稿:“套接字”类型上不存在属性“离开”
【发布时间】:2020-05-31 13:12:24
【问题描述】:

我想用 socket.leave("roomname") 在 socket.io 中留下一个房间。 Typescript 声称

“'Socket'类型上不存在属性'leave'”

这是我的代码:

import io from "socket.io-client";
// leave chat
export async function leaveChat(conversationId){
  const socket: SocketIOClient.Socket = io(process.env.SERVER_URL);
  socket.leave(`chat@${conversationId}`);
}

如何解决这个问题?

【问题讨论】:

  • 你确定有 leave 方法吗?
  • Nenroz 说没有,他是对的。它只是在回调中。

标签: reactjs typescript socket.io


【解决方案1】:

leaveon 回调函数:

import io from "socket.io-client";

export async function leaveChat(conversationId){
  const socket: SocketIOClient.Socket = io(process.env.SERVER_URL);
  socket.on('connection', s => {
    s.leave(`chat@${conversationId}`);
  });
}

您可以查看有关它的文档:https://socket.io/docs/server-api/#socket-leave-room-callback

【讨论】:

  • 好的,谢谢!所以在前端,我必须发出一个“leaveChat”事件,服务器会因为socket.leave而杀掉房间?我需要确保客户端和服务器中的套接字连接都因性能问题而被终止。或者如果用户离开页面(不是网站,只是网站的另一个页面),socket IO 是否会自动杀死两边的房间?
  • leave 函数会将客户端从指定房间中移除,您接下来要做的是发出一些东西,例如:socket.to('room').emit(...);
猜你喜欢
  • 2018-09-27
  • 2017-03-02
  • 2021-09-07
  • 2017-09-29
  • 2017-08-07
  • 2017-03-26
  • 2017-09-06
  • 2020-05-21
  • 1970-01-01
相关资源
最近更新 更多