HarmonyOS鸿蒙Next中socket.TCPSocketServer订阅'connect'事件,off掉之后,重新订阅,回调方法不生效

HarmonyOS鸿蒙Next中socket.TCPSocketServer订阅’connect’事件,off掉之后,重新订阅,回调方法不生效

// 开启serverSocket监听
const tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let bindAddr: socket.NetAddress = {
  address: '::',
  port: 1111,
  family: 2
};
// 设置TCPSocketServer连接的其他属性
const options: socket.TCPExtraOptions = {
  keepAlive: true,
};
tcpServer.setExtraOptions(options);
tcpServer.listen(bindAddr).then(() => {
  console.info(TAG, 'bind address success');
}).catch((err: BusinessError) => {
  console.info(TAG, `server listen error : ${err.message}`);
});

// 订阅TCPSocketServer的事件
const connectCallBack = () => {
  console.log('test');
};
tcpServer.on('connect', connectCallBack);

tcpServer.off('connect', connectCallBack);
// 回调不生效了
tcpServer.on('connect', connectCallBack);

使用场景:
开一个长时任务开启serverSocket监听,在某些页面需要关掉这个监听,没有找到socket.TCPSocketServer相应的close方法,后台日志发现监听没有关闭。只找到了tcpServer.off('connect',...),但是off掉之后,在需要重新订阅的时候,发现回调方法不生效,大家帮忙看下是什么原因呢?

更多关于HarmonyOS鸿蒙Next中socket.TCPSocketServer订阅'connect'事件,off掉之后,重新订阅,回调方法不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

更多关于HarmonyOS鸿蒙Next中socket.TCPSocketServer订阅'connect'事件,off掉之后,重新订阅,回调方法不生效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,TCPSocketServerconnect事件用于监听客户端连接。如果在调用off取消订阅后重新订阅connect事件,回调方法不生效,可能是以下原因:

  1. 事件绑定问题off方法取消订阅时需要确保传入的回调函数与之前订阅时的一致。如果回调函数不一致,off可能无法正确取消订阅,导致重新订阅时出现问题。

  2. 事件触发时机connect事件只在客户端连接时触发。如果重新订阅时没有新的客户端连接,回调方法不会被调用。

  3. 对象状态问题TCPSocketServer对象在取消订阅后可能处于某种状态,导致重新订阅时事件监听未正确恢复。确保对象在重新订阅前处于正常状态。

  4. 异步操作影响connect事件的订阅和取消可能涉及异步操作,确保异步操作完成后再进行重新订阅。

  5. 系统或API限制:某些系统或API可能存在限制,取消订阅后无法立即重新订阅。建议检查相关文档或日志,确认是否存在此类限制。

  6. 代码逻辑问题:检查代码逻辑,确保在重新订阅前没有其他操作影响了connect事件的正常绑定。

如果问题依然存在,建议检查相关日志或调试信息,确认事件订阅和取消的具体执行情况。

在HarmonyOS鸿蒙Next中,TCPSocketServerconnect 事件取消订阅后,重新订阅回调方法不生效,可能是由于事件监听器未正确绑定或事件未触发。建议检查以下几点:

  1. 确保正确取消订阅:使用 off 方法取消订阅时,确保传入的回调方法与之前订阅时一致。
  2. 重新订阅时机:确保重新订阅时,TCPSocketServer 仍处于活动状态。
  3. 事件触发条件:确认是否有新的客户端连接触发 connect 事件。

如果问题依旧,可尝试重新初始化 TCPSocketServer 实例,或检查相关API文档是否有更新。

回到顶部