[NodeJS]使用Node.js写一个简单的在线聊天室
2021-07-09 00:04
阅读:597
声明:教程来自《Node即学即用》。源代码案例均出自此书。博文仅为个人学习笔记。
第一步:创建一个聊天server。
首先,我们先来写一个Server:
var net = require(‘net‘) var chatServer = net.createServer() chatServer.on(‘connection‘,function(client){ client.write(‘connection~~~\n‘) client.end() }) chatServer.listen(2333) console.log(‘Server‘)
能够使用telnet命令訪问server:
第二步:监听全部的连接请求
server源代码:
var net = require(‘net‘) var chatServer = net.createServer() chatServer.on(‘connection‘,function(client){ client.write(‘Hello~~\n‘) client.on(‘data‘,function(data){ console.log(data); }) }) chatServer.listen(2333) console.log(‘Server‘)
这里加入了一个事件监听器client.on(),每当client发送data的时候这个函数都会被调用。
所以如今不论发送什么数据,server都会显示出来:
可是这里有个问题:返回的内容均为乱码,由于JS不能非常好的处理二进制数据。所以Node添加了一个buffer库来帮助server。
打印的字符实际上是16进制的字节数据,能够保持二进制的格式,由于TCP和Telnet都能处理它们。
第三步:客户端之间的通信:
var net = require(‘net‘) var chatServer = net.createServer() //server var clientList = [] //客户端数组 chatServer.on(‘connection‘,function(client){ client.write(‘Hello~Client~\n‘) clientList.push(client) client.on(‘data‘,function(data){ for (var i = 0; i
这个就是一个最简单的聊天server了,能够打开多个终端,输入telnet localhost 2333訪问server。
下一步。改进消息发送和显示的方式,让页面更友善一些。
我们把IP和端口号拼接作为username,这样能够看出来是谁发了消息。
同一时候我们还须要加上异常的处理。由于在前面的程序中。假设有些客户端退出并没有在server的clientlist中移除。
改善后的完整版本号例如以下:
/* * A chat online server */ var net = require(‘net‘) // server var chatServer = net.createServer() // clients var clientList = [] chatServer.on(‘connection‘,function(client){ /* //name = ip + port client.name = client.remoteAddress + ":" + client.remotePort */ client.name = "No." + client.remotePort client.write(‘Hello~ ‘ + client.name + "\n") //add the client to list clientList.push(client) //push clients to arraylist //when get data client.on(‘data‘,function(data){ broadcast(data,client) }) //when data end client.on(‘end‘,function(){ clientList.splice(clientList.indexOf(client),1) }) //when get error client.on(‘error‘,function(e){ console.log(e) }) }) //broadcast the message to the client function broadcast(message,client){ //the clients to delete var cleanup = [] //check clients in clientlist for (var i = 0; i
下一篇:js 实现继承
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:[NodeJS]使用Node.js写一个简单的在线聊天室
文章链接:http://soscw.com/essay/102535.html
文章标题:[NodeJS]使用Node.js写一个简单的在线聊天室
文章链接:http://soscw.com/essay/102535.html
评论
亲,登录后才可以留言!