写在前面:随着越来越多的新人开始接触白鹭引擎,创作属于自己的游戏。考虑到初学者会遇到一些实际操作问题,我们近期整理推出“菜鸟”系列技术文档,以便更好的让这些开发者们快速上手,Egret大神们可以自动忽略此类内容。
本文,我们通过Egret和Node.js实现一个在线聊天室的demo。主要包括:聊天,改用户名,查看其他用户在线状态的功能。大致流程为,用户访问网页,即进入聊天状态,成为新游客,通过底部的输入框,可以输入自己想说的话,点击发布,信息呈现给所有在聊天的人的页面。用户可以实时修改自己的昵称,用户离线上线都会实时广播给其他用户。
体验链接 http://7hds.com:8888/
下图为最终制作完成的聊天面板
WebSocket服务器可以用其他语言编写,本文采用的方法建立在Node.js上 。
在Node.js中我们使用ws第三方模块来实现服务器业务逻辑的快速搭建,还需使用uuid模块生成随机id,你需要使用npm包管理器来安装ws、uuid模块。使用以下命令:
安装完成之后,使用终端工具进入服务器目录,开始编写代码:
服务器端主要是接收信息,判断是聊天信息还是重命名信息,然后发送广播。同时,当用户连接上服务器端或者关闭连接时,服务器也会发送广播通知其他用户。
我们封装了wsSend函数用来处理消息的广播。对每个连接的用户,我们默认给他分配为游客。为了实现广播,我们用clients数组来保存连接的用户。
将编写好的文件保存为server.js,在终端工具中,使用node server.js来启动你刚刚编写的服务器。如果终端没有报错,证明你的代码已经正常运行。
在实际项目中,服务器逻辑远远比此示例复杂得多。服务器端完成后,再来编写客户端代码。
界面非常简单,我们通过两张图片来实现界面效果,首先创建我们的聊天界面,此项目中为了方便我们使用EUI进行快速开发。如下图:
首先创建一个Image来放置我们的背景图。
创建三个Label对象,一个作为title:“多人在线聊天室”,一个作为提示:“当前在线人数”,还有一个id为lb_online的作为在线人数显示文本。
创建一个EditableText对象id为input_msg作为消息发送输入框,用户可以在此输入消息进行发送。
创建一个Button对象id为btn_ok,点击按钮可以执行发送消息动作。
创建界面的操作和WebSocket对象创建动作在同时进行,在init方法中创建WebSocket对象,并执行服务器连接操作,代码如下:
由于服务器开放了8180端口,我们也需要使用8180端口进行连接。当连接成功,可执行onopen方法。
服务器连接成功了,在控制台打印 'Connection to server opened'。
onmessage方法中读取服务器传递过来的数据,并通过appendLog方法将数据显示在对应的文本里,
使用newLabel方法并将一条新消息插入到消息框中。
最后我们来编写发送消息的函数,在btnok中egret.TouchEvent.TOUCHTAP点击之后的相应函数为sendMessage方法。
最终运行后,我们就可以实现多人在线聊天功能了。
完整版代码如下:
本文的demo增加了客户端与服务器的互动,同时也实现了客户端之间的联系。
更多初级开发文档
领取专属 10元无门槛券
私享最新 技术干货