使用node.js实现多人聊天室(socket.io、B/S)

通过B/S架构实现多人聊天,客户端连接服务器,发送信息,服务器接收信息之后返回给客户端。

主要是通过socket.io实现浏览器和服务器之间进行实时,双向和基于事件的通信。

socket.io官方文档:https://socket.io/docs/

  • 新建一个文件夹作为项目文件夹
  • 新建一个js文件作为服务器,新建一个HTML文件作为客户端。
  • 建立服务器,使用http模块的createSrever快速创建一个服务,监听端口为3000;
1 let http = require("http");
2 3 let server = http.createServer((req, res) => {
4     res.end("<h1>server starting!</h1>")
5 });
6 ?
7 server.listen(3000, () => {
8     console.log("listening on *:3000");
9 });
  • 在项目根目录打开终端运服务器,提示端口服务器已经在3000端口开启。

  

  • 在浏览器中打开本地3000端口地址

  

  • 在项目文件夹根目录终端使用npm下载安装socket.io模块
npm i socket.io
  • 下载好后引用模块
let ws = require("socket.io");
let io = ws(server);
  • 监听客户端连接服务器情况,进行收发信息处理
io.on(‘connection‘, client => {
    let socketId = client.id; //  获取客户端的ID
    let clientIp = client.request.connection.remoteAddress; //  获取客户端的地址
    let address = client.handshake.address; //  获取客户端的地址
    console.log(address + " connected");
?
    //  监听客户端发送的信息
    client.on(‘message‘, msg => {
        console.log(address + ": " + msg);
        //  向所有客户端发送信息
        io.emit("message", msg);
    })
})
  • 建立客户端
  • 服务器返回一个网页,用于客户端输入发送信息
<div class="chat-box" id="chatbox">
    <input type="" name="" id="message" placeholder="Send STH...">
</div>
  • 引入socket.io
<script src="/socket.io/socket.io.js"></script>
  • 绑定回车事件,按回车发送信息,并显示在网页中
<script>
    let message = document.getElementById("message");
    let client = io.connect("/"); // 连接服务器
?
    document.onkeydown = function(event) { // 绑定键盘按键事件
        var e = event || window.event || arguments.callee.caller.arguments[0];
?
        if(e&&e.keyCode === 13) { // Enter键的代码是13
            let val = message.value;
            if(!val) return;
            client.send(val); // 向服务器发送输入框内容
?
            message.value = ""; // 清空输入框
        }
    }
?
    // 监听服务器发送的消息,将接收到的消息显示在网页上
    client.on("message", data => {
        let p = document.createElement(‘p‘);
        p.innerHTML = data;
        document.body.appendChild(p);
    })
?
?
</script>
  • 回到服务器
  • 引入fs模块,将页面作为响应返回前端
let server = http.createServer((req, res) => {
    let html = fs.readFileSync("./index.html");
    res.end(html)
});
  • 启动服务器,在浏览器中访问

   

  • 显示一个用户已经连接

  

  • 测试

  

附录

server.js

let http = require("http");
let ws = require("socket.io");
let fs = require("fs");

let server = http.createServer((req, res) => {
    let html = fs.readFileSync("./index.html");
    res.end(html);
});

let io = ws(server);

io.on(‘connection‘, client => {
    let socketId = client.id; //  获取客户端的ID
    let clientIp = client.request.connection.remoteAddress; //  获取客户端的地址
    let address = client.handshake.address; //  获取客户端的地址
    console.log(address + " connected");

    client.on(‘message‘, msg => {
        console.log(address + ": " + msg);
        io.emit("message", msg);
    })
})

server.listen(3000, () => {
    console.log("listening on *:3000");
});

index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <div class="chat-box" id="chatbox">
        <input type="" name="" id="message" placeholder="Send STH...">
    </div>

<script src="/socket.io/socket.io.js"></script>
<script>
    let message = document.getElementById("message");
    let client = io.connect("/");

    document.onkeydown = function(event) {
        var e = event || window.event || arguments.callee.caller.arguments[0];

        if(e&&e.keyCode === 13) {
            let val = message.value;
            if(!val) return;
            client.send(val);

            message.value = "";
        }
    }

    client.on("message", data => {
        let p = document.createElement(‘p‘);
        p.innerHTML = data;
        document.body.appendChild(p);
    })

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

原文地址:https://www.cnblogs.com/Raincost-Z/p/12158340.html

时间: 2024-08-25 11:57:06

使用node.js实现多人聊天室(socket.io、B/S)的相关文章

使用node.js和socket.io实现多人聊天室

刚学node.js,想着做点东西练练手.网上的东西多而杂,走了不少弯路,花了一天时间在调代码上.参考网上的一篇文章,重写了部分代码,原来的是基于基于node-websocket-server框架的,我没用框架,单单是socket.io. 一.基本功能 1.用户随意输入一个昵称即可登录2.登录成功后1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表3.退出登录1)支持直接退出2) 当有用户退出,其他所有在线用户会收

Spring整合DWR comet 实现无刷新 多人聊天室

用dwr的comet(推)来实现简单的无刷新多人聊天室,comet是长连接的一种.通常我们要实现无刷新,一般会使用到Ajax.Ajax 应用程序可以使用两种基本的方法解决这一问题:一种方法是浏览器每隔若干秒时间向服务器发出轮询以进行更新,另一种方法是服务器始终打开与浏览器的连接并在数据可用时发送给浏览器.第一种方法一般利用setTimeout或是setInterval定时请求,并返回最新数据,这无疑增加了服务器的负担,浪费了大量的资源.而第二种方法也会浪费服务器资源,长期的建立连接:而相对第一种

android asmack 注册 登陆 聊天 多人聊天室 文件传输

XMPP协议简介 XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的.它继承了在XML环境中灵活的发展性.因此,基于XMPP的应用具有超强的可扩展性.并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍.利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信. 这篇文章有基本的介绍,http://bl

Node.js开发入门—套接字(socket)编程

Node.js的net模块提供了socket编程接口,方便我们利用较为底层的套接字接口来实现应用协议.这次我们看一个简单的回显服务器示例,包括服务端和客户端的代码. 使用JavaScript也可以进行套接字编程,哈哈,这酸爽! 代码 分服务器和客户端两部分来说吧. echoServer代码分析 echoServer.js: var net = require("net"); // server is an instance of net.Server // sock is an ins

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 })); /

WebSocket入门教程(五)-- WebSocket实例:简单多人聊天室

from:https://blog.csdn.net/u010136741/article/details/51612594 [总目录] WebSocket入门教程--大纲 [实例简介] 本文,我们通过nodejs和javascript实现一个网页聊天室的demo.主要包括,聊天,改用户名,查看其他用户在线状态的功能.大致流程为,用户访问网页,即进入聊天状态,成为新游客,通过底部的输入框,可以输入自己想说的话,点击发布,信息呈现给所有在聊天的人的页面.用户可以实时修改自己的昵称,用户离线上线都会

【tcp-ip学习总结】基于udp的多人聊天室,带有登录注册功能

环境;vs2010,vs2013 服务器端 #include<stdio.h> #include<Winsock2.h> #include<stdlib.h> #pragma comment(lib,"Ws2_32.lib") typedef struct { char username[30];//用户名 char password[50];//用户密码 struct sockaddr_in addr;//用户的地址 int isOnlie;//是

基于socket编程的多人聊天室

先是做完的效果图:      server.c 1 /* 服务器端 server.c */ 2 #include <glib.h> 3 #include <stdio.h> 4 #include <fcntl.h> 5 #include <signal.h> 6 #include <sys/socket.h> 7 #include <sys/types.h> 8 #include <sys/time.h> 9 #inclu

线程练习题---简易多人聊天室

1 package Day_1; 2 3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.EOFException; 6 import java.io.IOException; 7 import java.net.ConnectException; 8 import java.net.Socket; 9 import java.net.SocketException; 10 i