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

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

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

  • 新建一个文件夹作为项目文件夹

  • 新建一个js文件作为服务器,新建一个HTML文件作为客户端。

  • 建立服务器,使用http模块的createSrever快速创建一个服务,监听端口为3000;

 let http = require("http");
let server = http.createServer((req, res) => {
res.end("<h1>server starting!</h1>")
});

server.listen(3000, () => {
console.log("listening on *:3000");
});
  • 在项目根目录打开终端运服务器,提示端口服务器已经在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>

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

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  2. node.js+websocket实现简易聊天室

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...

  3. 利用socket.io实现多人聊天室(基于Nodejs)

    socket.io简单介绍 在Html5中存在着这种一个新特性.引入了websocket,关于websocket的内部实现原理能够看这篇文章.这篇文章讲述了websocket无到有,依据协议,分析数据 ...

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

    用dwr的comet(推)来实现简单的无刷新多人聊天室,comet是长连接的一种.通常我们要实现无刷新,一般会使用到Ajax.Ajax 应用程序可以使用两种基本的方法解决这一问题:一种方法是浏览器每隔 ...

  5. Asp.net MVC + Signalr 实现多人聊天室

    Asp.net SignalR 简介: 首先简单介绍一下Signalr ,我也是刚接触,觉得挺好玩的,然后写了一个多人聊天室. Asp.net SignalR 是为Asp.net 开发人员提供的一个库 ...

  6. Apache MiNa 实现多人聊天室

    Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...

  7. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  8. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  9. 多人聊天室(Java)

    第1部分 TCP和UDP TCP:是一种可靠地传输协议,是把消息按一个个小包传递并确认消息接收成功和正确才发送下一个包,速度相对于UDP慢,但是信息准确安全:常用于一般不要求速度和需要准确发送消息的场 ...

随机推荐

  1. mysql的优化总结

    1,允许数据库适当冗余提高查询效率 2,对于索引的使用要适当

  2. tp3.2框架关闭日志记录

    在config.php中阿计入如下配置: 'LOG_RECORD' => false, // 默认不记录日志 'LOG_TYPE' => 'File', // 日志记录类型 默认为文件方式 ...

  3. Git - 08. git branch

    概述 简单描述以下, git branch 讲解的目的, 只是方便新手入门, 基本都是最简单的操作 所以东西可能不全 一是 我不理解 二是 有的东西出现, 可能会让新手产生误解 准备 os win10 ...

  4. 【HTML】如何在网页中屏蔽右键 ?

    如何在网页中屏蔽右键 众所周知,要保护一个页面,最基础的就是要屏蔽右键.而现在网页上用得最多的是function click(),即下面这段代码:   <script> function ...

  5. Qt- 图形界面应用程序的运行模式

    main() 定义主窗口 ————>fd = DefineMainWindow() 创建主窗口————>win = CreateMainWindow() 创建主窗口中的元素-----> ...

  6. 【玩转SpringBoot】SpringBoot应用的启动过程一览表

    SpringBoot应用的启动方式很简单,就一行代码,如下图01: 其实这行代码背后主要执行两个方法,一个是构造方法,一个是run方法. 构造方法主要内容就是收集一些数据,和确认一些信息.如下图02: ...

  7. 松软科技Web课堂:AJAX 简介

    AJAX AJAX 并不是编程语言. AJAX 是一种从网页访问 Web 服务器的技术. AJAX 代表异步 JavaScript 和 XML. AJAX 实例解释 HTML 页面 <!DOCT ...

  8. js正则表达式验证端口范围(0-65535)

    javascript正则表达式验证IP地址的端口合法性 if (!(/^[1-9]\d*$/.test(port) && 1 <= 1 * port && 1 * ...

  9. torchvision的理解和学习 加载常用数据集,对主流模型的调用.md

    torchvision的理解和学习 加载常用数据集,对主流模型的调用 https://blog.csdn.net/tsq292978891/article/details/79403617 加载常用数 ...

  10. (c#)删除最外层的括号

    题目 解