node+socket实现简易聊天室功能

本文实例为大家分享了node+socket实现简易聊天室的具体代码,供大家参考,具体内容如下

服务端

const net = require('net')
const  server = net.createServer()

//用户列表
let clients = []

//监听连接
server.on('connection',client=>{
    client.on('data',(chunk)=>{
        let data  = chunk.toString()
        if(data.match(/login:(.*)/)){
            let name = data.match(/login:(.*)/)[1]
            client.name = name
            clients.push(client)
            console.log(`用户${name}上线`)
        }else{
            for (const client of clients) {
                if(client.name!==JSON.parse(data).name){
                    client.write(data)
                }

            }
        }
    })

    client.on('close',()=>{
        console.log(`用户${client.name}下线`)
    })

    client.on('error',()=>{
        console.log(`用户${client.name}发生错误`)
    })

})

server.on('error',(err)=>{
    console.log('服务器错误',err)
})

server.on('close',()=>{
    console.log('服务器关闭')
})

server.listen(9527,()=>{
    console.log("服务器开启")
})

客户端

const net = require('net')
const readline =  require('readline')
//读取输入的信息
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

//名字
const name  =  process.argv[2]
//连接服务器
const client = net.createConnection({port:9527},()=>{
    console.log(name+'连接到服务器');
    client.write(`login:${name}`)
    client.name = name
    //开始发送信息
    sendMsg(client)
})

client.on('data', (chunk) => {

    let data  = JSON.parse(chunk.toString())
    if(data){
        console.log(`[${data.name}] : ${data.msg}`)
    }
});
client.on('end', () => {
    console.log('已从服务器断开');
});
client.on('error', () => {
    console.log('服务器错误');
});

//一直递归输出
function sendMsg(client){

    rl.question('',(line)=>{
        client.write(JSON.stringify({
            name:client.name,
            msg:line
        }))
        sendMsg(client)
    })
}

演示

服务端

客户端1

客户端2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • AngularJS+Node.js实现在线聊天室

    不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍,对于基本的使用依然有很多说不清道不明的疑惑,于是决定通过做一个在线聊天室帮助理解.DEMO可以戳→chat room,代码可以戳→ChatRoom-AngularJS. 清晰图可以戳 http://files.jb51.net/file_images/article/201508/201508281040051.gif 功能 着手开发之前,首先明确一

  • Node.js websocket使用socket.io库实现实时聊天室

    认识websocket WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duple).一开始的握手需要借助HTTP请求完成. 其实websocket 并不是很依赖Http协议,它也拥有自己的一套协议机制,但在这里我们需要利用的socket.io 需要依赖到http . 之前用java jsp写过一个聊天,其实实现逻辑并不难,只是大部分时间都用在UI的设计上,其实现原理就是一个基于websocket的通信,要想做一个好的聊天室,我觉得大部

  • NodeJS实现一个聊天室功能

    看效果 一直说我喜欢卖关子,这次直接看效果: 聊天界面(喜欢的可以自己画一个比较逼真的页面) 前文 先说一下为什么写这个东西,最近不是在写NodeJS知识点的梳理嘛,但是我发现梳理的过程着实无聊的要死,虽然已经快梳理一半了,只是还没发布,这个不重要,重要的是不做点什么东西确实无聊,所以今天把我做这个的过程记录给你们看一下,喜欢的可以拿去玩玩.实现的功能是可以聊天,可以显示用户自定义的昵称,并且显示发送时间 PS:这个功能如果我们使用webstorm新建一个express app的项目的话,是可以

  • Nodejs实现多房间简易聊天室功能

    1.前端界面代码 前端不是重点,够用就行,下面是前端界面,具体代码可到github下载. 2.服务器端搭建 本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制,可将两种服务搭建在同一个端口下. 1.包描述文件:package.json,这里用到了两个依赖项,mime:确定静态文件mime类型,socket.io:搭建websocket服务,然后使用npm install  安装依赖 { "name": "chat_room",

  • nodejs实现的一个简单聊天室功能分享

    今天我来实现一个简单的聊天室,后台用nodejs, 客户端与服务端通信用socket.io,这是一个比较成熟的websocket框架. 初始工作 1.安装express, 用这个来托管socket.io,以及静态页面,命令npm install express --save,--save可以使包添加到package.json文件里. 2.安装socket.io,命令npm install socket.io --save. 编写服务端代码 首先我们通过express来托管网站,并附加到socke

  • nodejs+express搭建多人聊天室步骤

    前言 本文主要是笔者在学习node的时候,作为练手的一个小项目,花了几天空余时间,边码边写教程的一个过程.适用于对node理论知识看的多,实战少的同学,那么现在就让我们开始吧! 准备工作 新建一个文件夹 chatroom 在终端输入以下命令,按照步骤npm(没装过的去官网安装下node和npm)会自动给你生成一个package.json文件 安装express和socket.io package.json文件如下: //package.json { "name": "chat

  • 使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室

    一,利用Node搭建静态服务器 这个是这个项目的底层支撑部分.用来支持静态资源文件像html, css, gif, jpg, png, javascript, json, plain text等等静态资源的访问.这里面是有一个mime类型的文件映射. mime.js /** * mime类型的 map * @ author Cheng Liufeng * @ date 2014/8/30 * 当请求静态服务器文件的类型 html, css, gif, jpg, png, javascript,

  • Node.js利用Net模块实现多人命令行聊天室的方法

    这篇文章介绍的是Node.js利用Net模块实现命令行式的多人聊天室,下面话不多说,来看看详细的介绍吧. 1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类: Server和Socket类.工厂方法. Server类如下图所示: net.Server类可以用来创建一个TCP或本地服务器,继承了EventEmitter. Socket类如下: net.Socket类一般用创建一个socket客户端或者是ne

  • Node.js中使用socket创建私聊和公聊聊天室

    先给大家展示效果图: 在上篇文章给大家介绍使用Angular和Nodejs.socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧. nodejs的应用中,关于socket应该是比较出彩的了,socket.io在github上有几万人的star,它的成功应该是不输于express的,为了方便了解整个socket.io的使用. 例子请点击http://chat.lovewebgames.com/ 源码下载https://git

  • 基于Nodejs利用socket.io实现多人聊天室

    socket.io简介 在Html5中存在着这样的一个新特性,引入了websocket,关于websocket的内部实现原理可以看这篇文章,这篇文章讲述了websocket无到有,根据协议,分析数据帧的头,进行构建websocket.虽然代码短,但可以很好地体现websocket的原理. ,这个特性提供了浏览器端和服务器端的基于TCP连接的双向通道.但是并不是所有的浏览器都支持websocket特性,故为了磨平浏览器间的差异,为开发者提供统一的接口,引入了socket.io模块.在不支持webs

随机推荐