今天实现简单的聊天室。 后台使用nodejs,客户端和服务端通信使用socket.io。 这是一个相对成熟的websocket框架。
初始工作
安装express并使用它托管socket.io和静态页面,命令npm install express --save,--save,然后将软件包添加到package.json文件中
安装socket.io,命令npm install socket.io --save。
创建服务端代码
首先在express中托管网站,并将其附加到socket.io实例。 因为socket.io的首次连接需要http协议
varexpress=require('express )、
io=require(socket.io );
var app=express (;
app.use(express.static ) __dirname );
varserver=app.Listen(8888;
var ws=io.listen (服务器;
添加服务器连接事件,并在客户端连接成功后向所有在线用户发送公告,在用户发送消息时向其他用户发送广播。
ws.on('connection ',function ) (客户端)
console.log (' (033 [ 96 msomeoneisconnect (033 [ 39mn ' ] );
client.on('join ',function ) ) msg )。
//检查有无重复
if (检查耐克名称(msg ) ) }
cient.Emit('nickname ','昵称中存在重复!' );
}else{
client.nickname=msg;
ws.sockets.Emit(announcement、“系统”、msg )加入了聊天室! ' );
}
);
//拦截发送消息
client.on(send.message ),function ) (msg )
client.broadcast.emit (send.message ),client.nickname,msg );
);
//断开连接时通知其他用户
client.on('disconnect ',function ) )。
if(client.nickname ) {
离开client.broadcast.emit (send.message、“系统”、client.nickname )聊天室! ' );
}
() )
() )
由于客户端由昵称标识,因此服务器端需要一个检测昵称重复的函数
//检查昵称是否重复
varchecknickname=function{
for(varkinws.sockets.sockets ) {
if (ws.sockets.sockets.hasownproperty (k ) ) )
if (ws.sockets.sockets [ k ] ws.sockets.sockets [ k ].nickname==name ) {
返回真;
}
}
}
返回假;
}
创建客户端代码
由于服务端采用了第三方websokcet框架,因此前端页面必须单独浏览socket.io客户端代码。 可以从socket.io模块中搜索源文件。 windows路径为node _ modules _ socket.io _ node _ modules _ sockes
前端处理输入昵称检查、消息处理,完整代码如下。
socket.io聊天室示例
透明屏幕
发送
总结
nodejs是个好东西,特别是在处理消息通信、网络编程方面,是天生的异步IO