首页 > 编程知识 正文

16ajax,websocket node

时间:2023-05-04 15:21:23 阅读:118948 作者:3444

今天实现简单的聊天室。 后台使用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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。