node实现一个简单的聊天室(认识一下socket)

边学边理解node的高深,今天写了一个聊天室的demo,很简单,认识一下socket

node服务端代码

var express = require(‘express‘);
var app = express();//session固定写法
var session = require(‘express-session‘);
app.use(session({
    secret: ‘keyboard cat‘,
    resave: false,
    saveUninitialized: true
}));
//引入socket固定写法
var http = require(‘http‘).Server(app);
var io = require(‘socket.io‘)(http);
//渲染页面的ejs模板设置
app.set(‘view engine‘,‘ejs‘);

app.get(‘/‘,function(req,res,next){
    if(req.session.user){
        res.redirect("chat")
    }
    res.render("index")
})

var userList = [];

app.get(‘/user‘,function (req,res,next) {
    var user = req.query.username;
    if(!user) {
        res.render("index");
        return;
    }
    if (userList.indexOf(user) != -1){
        res.send("用户名已经被占用");
        return;
    }
    userList.push(user);
    req.session.user = user;
    res.redirect(‘/chat‘);
})

app.get(‘/chat‘,function (req,res,next) {
    if(!req.session.user){
        res.redirect(‘/‘);
        return;
    }
    res.render(‘chat‘,{
        "user":req.session.user
    })
})

io.on("connection",function(socket){
    socket.on("send",function(msg){
        io.emit("huida",msg)
    })
})

app.use(express.static(‘./public‘));

http.listen(3000,‘192.168.0.46‘);

首页ejs模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .container {
            width: 500px;
            height: 70px;
            line-height: 70px;
            border: 1px solid #ddd;
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            top:0;
            margin: auto;
            text-align: center;
            background-color: #ddd;
        }
        input{
            height: 40px;
            padding: 5px;
        }
        #username {
            width: 300px;
        }
        #submit {
            width: 100px;
            height: 54px;
            padding: 5px;
        }
    </style>
</head>
<body>

<div class="container">
    <form action="/user" method="get">
        <input id="username" type="text" name="username" placeholder="请输入姓名">
        <input id="submit" type="submit" value="进入聊天室">
    </form>
</div>

</body>
</html>

聊天室页面ejs模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .container,.chat-box {
            width: 500px;
            height: 500px;
            border: 1px solid #ddd;
            margin: 0 auto;

        }
        .chat-box {
            overflow: auto;
        }
        .chat-box h3 {
            height: 40px;
            line-height: 40px;
            background-color: #eee;
            padding-left: 10px;
        }

        .chat-box ul {
            padding: 20px;
        }

        li {
            list-style: none;
        }

        .text {
            width: 400px;
            height: 30px;
            line-height: 30px;
            padding: 5px 10px;
        }

        #btn {
            width: 70px;
            height: 44px;
            line-height: 44px;
            text-align: center;
            cursor: pointer;
        }
        .username{
            color: #e4393c;
        }
    </style>
    <script src="jquery-2.1.4.min.js"></script>
</head>
<body>

<div class="container">
    <div class="chat-box">
        <h3>欢迎<span class="username"> <%= user %> </span>来到聊天室</h3>
        <ul class="list">

        </ul>
    </div>
    <div>
        <input class="text" type="text" placeholder="输入内容">
        <input id="btn" type="submit" placeholder="发送">
    </div>
</div>

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();

    var btn = document.getElementById(‘btn‘);
    btn.onclick = function () {
        var msg = $(‘.text‘).val();
        var username = $(‘.username‘).text();
        if(msg){
            socket.emit("send",{
                "text":msg,
                "user":username
            })
            $(‘.text‘).val(‘‘)
        }else {
            alert(‘聊天内容不能为空!‘)
        }
    }

    socket.on("huida",function (msg) {
        $(‘.list‘).prepend(‘<li><b>‘+msg.user+‘ 说: </b>‘+msg.text+‘</li>‘)
    })

</script>
</body>
</html>

这个小demo可以带你理解一下socket,想深入理解者,自行百度,我只能帮你到这里!

时间: 2024-10-04 01:30:45

node实现一个简单的聊天室(认识一下socket)的相关文章

WebSocket介绍和一个简单的聊天室

WebSocket是什么呢? WebSocket一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范,WebSocketAPI被W3C定为标准. WebSocket 是独立的.创建在 TCP 上的协议,和 HTTP 的唯一关联是使用 HTTP 协议的101状态码进行协议切换,使用的 TCP 端口是80,可以用于绕过大多数防火墙的限制. WebSocket 使得客户端和服务器之间的数据交换变得更加简单

简单的聊天室制作

简单的聊天室制作 一个简单的聊天室,主要是就两个部分,一部分就是我们进行的时候那个聊天窗口,另外一个就是背后的服务器,我们要写一个聊天窗口,也要写一个相对应的服务器. 做一个项目过程中,写一个代码很简单,但是把逻辑分析清楚,将制作的过程中所有的逻辑关系分析清楚是项目的最重要的环节. 下面的一步一步,将这个聊天室的制作过程一步一步制作出来. 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 第八步: 第九步: 第十步: 第十一步: 这就是简单的聊天室的制作的过程.这样我们来看一

玩转Node.js(四)-搭建简单的聊天室

玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一些个教程使用它来搭建一个超级简单的聊天室. 初始化项目 在电脑里新建一个文件夹,叫做“chatroom”,然后使用npm进行初始化: $ npm init 然后根据提示以及相关信息一步一步输入,当然也可以一路回车下去,之后会在项目里生成一个package.json文件,里面的信息如下: 1 $ ca

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

通过python 构建一个简单的聊天服务器

构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使用 Telnet,客户机可以连接到 Python 聊天服务器上,并在全球范围内相互进行通信.提交到聊天服务器的消息可以由其他人进行查看(以及一些管理信息,例如客户机加入或离开聊天服务器).这个模型如图 1 所示. 图 1. 聊天服务器使用 select 方法来支持任意多个客户机 聊天服务器的一个重要

用Go语言实现一个简单的聊天机器人

一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量.分隔符.操作符.它们可以组成各种表达式和语句,而后者都无需以分号结尾. 标识符:程序实体,前者即为后者的名称. 关键字:被编程语言保留的字符序列,不能把它用作标识符. 字面量:值的一种标记法. 操作符==运算符:用于执行特定算术或逻辑操作的符号,操作的对象称为操作数. 数组:由若干相同类型的元素组成

C 基于UDP实现一个简易的聊天室

引言 本文是围绕Linux udp api 构建一个简易的多人聊天室.重点看思路,帮助我们加深 对udp开发中一些api了解.相对而言udp socket开发相比tcp socket开发注意的细节要少很多. 但是水也很深. 本文就当是一个demo整合帮助开发者回顾和继续了解 linux udp开发的基本流程. 首先我们来看看 linux udp 和 tcp的异同. /* 这里简单比较一下TCP和UDP在编程实现上的一些区别: TCP流程 建立一个TCP连接需要三次握手,而断开一个TCP则需要四个

Android开发之简单的聊天室(客户端与服务器进行通信)

1.使用ServerSocket创建TCP服务器端 Java中能接收其他通信实体连接请求的类是ServerSocket, ServerSocket对象用于监听来 自客户端的Socket连接,如果没有连接,它将一直处于等待状态.ServerSocket包含一个监听来自客户端连接请求的方法. 1) Socket accept():如果接收到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞. 创建ServerSoc

基于Server-Sent Event的简单在线聊天室

一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览知乎时如果有人回答了我们的问题,知乎就会即时提醒我们,再比如现在电子商务的在线客服功能.这些能大大提高用户体验的功能都是基于Web即时通信实现的. 普通HTTP流程 客户端从服务器端请求网页 服务器作出相应的反应 服务器返回相应到客户端 而由于HTTP请求是无状态的,也就是说每次请求完成后,HTTP链