首页 > 代码库 > [NodeJS]使用Node.js写一个简单的在线聊天室
[NodeJS]使用Node.js写一个简单的在线聊天室
声明:教程来自《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 < clientList.length; i++) { clientList[i].write(data) }; }) }) chatServer.listen(2333) console.log(‘Server‘)
这个就是一个最简单的聊天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 < clientList.length; i++) { if(client != clientList[i]){ if (clientList[i].writable) { //write message if writable clientList[i].write(client.name + " says " + message) }else{ //add to cleanup list and destroy if not writable cleanup.push(clientList[i]) clientList[i].destroy() } } } //remove the clients in clientlist according to the cleanup list for (var i = 0; i < cleanup.length; i++) { clientList.splice(clientList.indexOf(cleanup[i]),1) }; } //listen to 2333 port chatServer.listen(2333) //log the console.log(‘Server is running‘)
[NodeJS]使用Node.js写一个简单的在线聊天室
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。