当前位置: 首页 > news >正文

鸿蒙NEXT开发笔记(九)仿微信聊天App的收发文本消息

上一节我们把SocketIO库导入App工程,那么怎样通过SocketIO库来传递聊天消息呢?接下来就以文本消息为例,介绍如何利用SocketIO库在鸿蒙真机与服务器之间收发文本消息。
由于SocketIO库属于外部的第三方库,因此以源码方式导入SocketIO库的时候,还要补充相应的依赖配置。也就是打开App模块的的oh-package.json5,在dependencies节点内部添加库名、版本号或者库路径。以SocketIO库为例,给App工程导入该库的配置如下:

"dependencies": {"@ohos/socketio": "file:../library"
}

接着按照上一篇文章《引入第三方的SocketIO库》的说明,依次往App代码添加导包语句、声明语句,以及监听代码和连接代码。然后继续下面的文本消息发送与文本消息接收流程。

1、开启后端的SocketIO服务

首先按照《Android Studio开发实战:从零基础到App上线(第3版)》一书的“13.5 实战项目:仿微信的私聊和群聊”的操作步骤,在IDEA中导入该书源码的HttpServer工程,再启动源码里的SocketIO服务端程序。其中处理文本消息收发的SocketIO代码片段如下:

// 添加文本发送的事件监听器
server.addEventListener("send_text", String.class, (client, message, ackSender) -> {System.out.println(client.getSessionId().toString()+"发送文本消息:"+message);client.sendEvent("receive_text", "不开不开我不开,妈妈没回来谁来也不开。");
});

可见上面的服务端代码正在监听send_text接口,一旦从该接口接收到客户端发送的文本消息,就向客户端的receive_text接口反馈另一段文本内容。

2、通过SocketIO发送文本消息

回到鸿蒙App工程,调用SocketIO客户端的emit方法,向服务端的send_text接口发送文本字符串。发送代码如下:

this.client.emit('send_text', this.content);

3、通过SocketIO接收文本消息

前面的第二步只实现了向服务端发送文本消息,尚未实现从服务端接收文本消息。那么鸿蒙App工程还要调用SocketIO客户端的on方法,指定监听receive_text接口,从该接口获取服务端返回的文本消息。监听接口的处理代码如下:

this.client.on('receive_text', (text: string) => {console.info('receive_message: '+text)this.result = '收到服务端返回文本消息:'+text
})

4、取消文本消息的接收监听

注意,在退出消息页面的时候,需要同时取消接收文本消息的监听,也就是调用SocketIO客户端的off方法。取消监听的代码如下:

this.client.off('receive_text') // 取消接收文本消息的监听

最后编译运行App,在鸿蒙真机上点击发送按钮,向SocketIO服务器发送文本消息“小兔子乖乖,把门儿开开”,之后收到SocketIO服务器返回的文本消息“不开不开我不开,妈妈没回来谁来也不开。”根据下面的文本消息收发效果图,可知利用SocketIO成功实现了设备间的文本消息收发功能。

下一篇文章会介绍在收发图片消息时如何封装和解析JSON串。
 


http://www.mrgr.cn/news/63063.html

相关文章:

  • 无人机救援系统基本组成
  • 选项卡设计与实现
  • Python酷库之旅-第三方库Pandas(183)
  • [数组基础] 0724. 寻找数组的中心下标
  • 机器学习算法之回归算法
  • Java中跳转结构
  • 实系数多项式的运算算法
  • <HarmonyOS第一课>HarmonyOS SDK开放能力简介的课后习题
  • 用示波器如何调方波?
  • 11-Python基础编程之错误和异常
  • HTML 事件
  • 深入理解 Java UUID 五个版本的区别及使用场景
  • PMP–知识卡片--项目经理领导风格
  • Partition架构
  • 荒野大嫖客:救赎 MagicRDR拆包工具简体中文汉化版1.3.6.3
  • Edge 浏览器特别好用的几个插件
  • 【JS学习】04. JS基础语法-函数
  • 18.网工入门篇--------今天介绍下广域网技术
  • Mysql的行锁,改一行锁一行
  • Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词