nodejs结合Socket.IO实现websocket即时通讯

目录
  • 为什么要用 websocket
  • Socket.io
  • 开源项目
  • 效果预览
  • app.js
  • index.html

为什么要用 websocket

websocket 是一种网络通信协议,一般用来进行实时通信会使用到。

websocket 协议和 http 协议类似,http 协议有一个缺陷,只能由客户方端发起请求,服务端根据请求 url 和传过去的参数返回对应结果

websocket 是双向通信的,只要 websocket 连接建立起来,可以由客户端给服务端发送数据,也可以由服务端主动给客户端发送数据

websocket 适用场景:网页版聊天室,网页版客服,前后端频繁交换数据的即时通讯场景。

Socket.io

双向和低延迟的websocket通信包,高性能,高可靠,可伸缩。
(简单地讲,就是将websocket进行封装和优化。)

Socket.IO 是一个库,可以在浏览器和服务器之间实现实时、双向和基于事件的通信。 它包括:

  • server端
  • client端

官方网址
https://socket.io/
官方文档
https://socket.io/docs/v4/

开源项目

以下代码和时间项目会发布在开源项目【nodejs-study】,欢迎下载和学习

效果预览

输入node app 运行服务之后可以通过 http://localhost:3000/ 进行访问,如果看到输出监听3000端口和前端显示hello world证明项目启动成功。

前端页面:一个聊天的UI框,包含发送和接收功能 http://localhost:3000/test

后台websocket:监听和答复

app.js

首先需要安装express和socket.io库

输入npm install express --save或者yarn add express

输入npm install socket.io--save或者yarn add socket,io

接下来实现 对 //test 两个路径的监听

  • /返回hello world
  • /test返回html连接页面

socket.on(“chat message”,callback function)
表示开始监听"chat message"通道,只要前后端都是一致的通道即可。

socket.emit(“chat message”, msg.toUpperCase());
表示对这个"chat message"通道进行回复,我们暂时是对英文字母做大写处理并返回。

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);

app.get('/', (req, res) => {
    res.send('<h1>Hello world</h1>');
  });

app.get('/test', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

// io.on('connection', (socket) => {
//   console.log('a user connected');
// });
//by zhengkai.blog.csdn.net
//处理socket.on信息并socket.emit回复信息
//这里对接收到的msg做大写处理
io.on('connection', (socket) => {
    //Socket.io by zhengkai.blog.csdn.net
    socket.on('chat message', (msg) => {
      console.log('received: ' + msg);
      socket.emit("chat message", msg.toUpperCase());
    });
  });
//监听端口3000
server.listen(3000, () => {
  console.log('listening on *:3000');
});

index.html

这做一些样式处理,并且有以下body内容:

  • message的ul,可以用来追加li信息,显示记录往来
  • 一个form表单,用来提交要发送的信息

script部分而言,首先使用官方的socket.io 的js client , 初始化一个连接,添加监听事件:

  • 输入非空内容提交后,发送信息给websocket后台,同事也输出在信息列表
  • 接收到信息之后,显示在信息列表
<!DOCTYPE html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <style>
      body { margin: 0; padding-bottom: 3rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }

      #form { background: rgba(0, 0, 0, 0.15); padding: 0.25rem; position: fixed; bottom: 0; left: 0; right: 0; display: flex; height: 3rem; box-sizing: border-box; backdrop-filter: blur(10px); }
      #input { border: none; padding: 0 1rem; flex-grow: 1; border-radius: 2rem; margin: 0.25rem; }
      #input:focus { outline: none; }
      #form > button { background: #333; border: none; padding: 0 1rem; margin: 0.25rem; border-radius: 3px; outline: none; color: #fff; }

      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages > li { padding: 0.5rem 1rem; }
      #messages > li:nth-child(odd) { background: #efefef; }
    </style>
  </head>
  <body>
    <ul id="messages"></ul>
    <form id="form" action="">
      <input id="input" autocomplete="off" /><button>Send</button>
    </form>
  </body>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    var socket = io();

    var messages = document.getElementById('messages');
    var form = document.getElementById('form');
    var input = document.getElementById('input');

    //输出到屏幕
    function addMessage(str){
        const li = document.createElement("li")
        li.innerHTML=str;
        messages.appendChild(li); 

    }
    // console.log(form)
    form.addEventListener('submit', function(e) {
      e.preventDefault();
      if (input.value) {
        //Socket.io by zhengkai.blog.csdn.net
        let msg = '发送消息:'+input.value ;
        console.log(msg)
        socket.emit('chat message', input.value);
        addMessage(msg);
        //清空个输入框
        //input.value = '';
      }
    });
    socket.on("chat message", (arg) => {
        let msg = '接收消息:'+arg ;
        console.log(msg); // world
        addMessage(msg);
    });
  </script>

</html>

到此这篇关于nodejs结合Socket.IO实现websocket即时通讯 的文章就介绍到这了,更多相关node websocket即时通讯 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • NodeJs 实现简单WebSocket即时通讯的示例代码

    服务器的实现很简单,先装一个nodeJs的模块,叫nodejs-websocket , 直接在nodeJs命令行中敲入:npm install nodejs-websocket回车就可以安装好了,然后就可以开始建立服务器了,因为有了nodejs-websocket模块,所以很多工作都不用我们自己做,直接调用别人封装好的方法就行了: 服务端代码 根据客户端传来的消息判断哪个是game1,哪个是game2,保存connection对象. var ws = require("nodejs-websoc

  • nodejs结合Socket.IO实现websocket即时通讯

    目录 为什么要用 websocket Socket.io 开源项目 效果预览 app.js index.html 为什么要用 websocket websocket 是一种网络通信协议,一般用来进行实时通信会使用到. websocket 协议和 http 协议类似,http 协议有一个缺陷,只能由客户方端发起请求,服务端根据请求 url 和传过去的参数返回对应结果 websocket 是双向通信的,只要 websocket 连接建立起来,可以由客户端给服务端发送数据,也可以由服务端主动给客户端发

  • nodejs结合Socket.IO实现的即时通讯功能详解

    本文实例讲述了nodejs结合Socket.IO实现的即时通讯功能.分享给大家供大家参考,具体如下: 动态web 在html5以前,web的设计上并没有考虑过动态,他一直是围绕着文档设计的,我们看以前比较老的网站,基本上都是某一刻用来显示单一的文档的,用户请求一次web页面,获取一个页面,但是随着时间的推移,人们想要web做更多的事情了,而不是简单的要显示文档,而javaScript一直处于开发人员推动web页面功能的发展中心. Ajax无疑是动态Web页面的一个重大发展,他不再需要我们即使更新

  • nodejs结合socket.io实现websocket通信功能的方法

    本文实例讲述了nodejs结合socket.io实现websocket通信功能的方法.分享给大家供大家参考,具体如下: 因为项目中有需要实时获取后台数据的场景,之前一直是使用http心跳请求的方法.因为websocket与此模式相比有很大的性能提升,而且可以提高实时性,所以对websocket作了一些研究.这里是使用nodejs+socket.io来实现的. 达成目标 将原来心跳请求后台数据的方式,修改为通过socket连接后台统一推送的方式.后台的数据由别的进程写入文件或写入redis,这里实

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

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

  • NetCore WebSocket即时通讯示例

    NetCore WebSocket 即时通讯示例,供大家参考,具体内容如下 1.新建Netcore Web项目 2.创建简易通讯协议 public class MsgTemplate { public string SenderID { get; set; } public string ReceiverID { get; set; } public string MessageType { get; set; } public string Content { get; set; } } Se

  • Python基于socket实现简单的即时通讯功能示例

    本文实例讲述了Python基于socket实现简单的即时通讯功能.分享给大家供大家参考,具体如下: 客户端tcpclient.py # -*- coding: utf-8 -*- import socket import threading # 目标地址IP/URL及端口 target_host = "127.0.0.1" target_port = 9999 # 创建一个socket对象 client = socket.socket(socket.AF_INET,socket.SOC

  • SpringBoot实现WebSocket即时通讯的示例代码

    目录 1.引入依赖 2.WebSocketConfig 开启WebSocket 3.WebSocketServer 4.测试连接发送和接收消息 5.在线测试地址 6.测试截图 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>

  • 使用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,

  • 基于socket.io和node.js搭建即时通信系统

    使用socket.io和nodejs搭建websocket服务器端 socket.io不仅可以搭建客户端的websocket服务,而且支持nodejs服务器端的websocket. 下面让我来介绍一下怎么安装配置nodejs. 进入http://nodejs.org/#download下载msi文件.一直点next安装.最后文件会自动安装在C:\nodejs目录下. 安装完成后,会自动配置环境环境变量.如果没有自动配置,自己手动在path处加上 ;C:\nodejs\. 安装完成后,需要配置np

随机推荐