新手关于node.js 使用 socket.io 建立一个简单聊天室的问题
发布于 10 年前 作者 heshiyu2015 4180 次浏览 最后一次编辑是 8 年前 来自 问答

各位大神,我是一个node.js新手,最近在学习《《Node.js实战》》这本书进行学习,书上有一个简单聊天室的例子,主要用socket.io 来实现。下面是我的仓库,我写了一半的项目名字是:node_chat,代码不多,都在里边, 我的仓库 下图为服务器文件的一段代码 服务器文件.png 有用户链接上来后,执行guestNumber,joinRoom,handleNameChangeAttempts等方法。 assignGuestName.png 以上图assignGuestName为例子,执行完毕后用 socket.emit(‘nameResult’,{ success:true, name:name }); 给客户端返回,客户端成功用socket.on()接收。 同样, joinRoom.png JoinRoom函数调用后客户段也成功接收,下面上一些客户端的代码 客户端.png 但是handleNameChangeAttempts却出问题了,下面上其代码 handleNameChangeAttempts.png 本人调试可知已经执行到了 socket.emit(‘nameResult’,{ success:true, name:name }); socket.broadcast.to(currentRoom[socket.id]).emit(‘message’,{ text:previousName + 'is now known as ’ + name + ‘.’ }); 可是执行完之后就返回了404,跳不到客户端的index.html了,奇怪为什么都执行到socket.emit了,前两个方法可以,后两个方法就错了,调试了挺久找不到问题,求助各位大神

4 回复

看了看你的代码,我觉得你这里出现的问题应该是没有理解 nodejs 的异步到底是怎么回事。

我看代码中有不少 emit 和 broadcast 的操作都没有接收回调函数,你是按同步代码的写法在写 nodejs 的异步代码,这样是很容易出错的。

你调调看是不是这方面的原因

呃,有一处 $(’$send-message’) 应该是 $(’#send-message’)。 哎,用node-monkey也很难调试找到这种bug啊。

@alsotang 大神教训的是,还得多多学习

@ChopperLee2011 谢谢啦,我捉急了,以后出问题要多查查这方面

回到顶部