socket.io在express框架中的使用以及简单的html页面示例

socket.io在express框架中的使用与html示例

今天水一篇关于socket在express框架中的使用方法的文章,还做一个简单的html页面做示范,后续用空再写一篇在前端脚手架比如vue中的示范
首先讲讲什么是socket,为什么要使用socket?
Socket.io 是一个实时的、基于事件的双向通信库,它能够在客户端和服务器之间建立持久性连接。在使用 Socket.io 时,需要在服务器端和客户端同时引入相应的 Socket.io 库。
对于 Express 服务器,可以通过在服务器端引入 Socket.io,并将其与 Express 结合使用。这样,Express 服务器就能够处理 Socket.io 的相关请求。在服务器端创建 Socket.io 实例后,可以将其附加到正在运行的 Express 服务器上,使得 Socket.io 和 Express 共享同一个服务器端口。
当客户端加载网页时,可以从服务器上获取到服务端口下的 Socket.io.js 文件。这是因为 Socket.io 在服务器端会自动提供一些客户端所需的 JavaScript 文件,例如 Socket.io.js。通过在客户端引入该文件,客户端就能够连接到 Socket.io 服务器,并与服务器进行实时的双向通信。
简而言之,Socket.io 提供了一个方便的方式来在客户端和服务器之间建立持久性连接,并通过事件进行实时的双向通信。在 Express 服务器中使用 Socket.io,可以让客户端通过加载服务端口下的 Socket.io.js 文件来进行连接和通信。
从上面就可以明显看到,其实大部分socket是用来做聊天功能的,毕竟这个功能适应。
如何在express中使用socket.io
首先我们知道一个就是,express脚手架生成的框架,启动的服务器在bin下的www中,而socket是需要使用server的,所以就在www下加入socket代码就对了,但是要养成良好的代码习惯,毕竟www这个文件要求就是简洁,方便维护,所以我们需要在随便一个目录或者根目录下创建一个socketio文件(我发现项目里面的单词写错了,大家别介意哈,当然别学我~ ),如下所示:
看最后这个文件就是新建的
那个新建的文件就是
(scoketio)
,然后就是先下载两个包,命令是:

npm install socket.io
npm install cors //这个是后面可能会遇到的跨域问题,反正先下了

搞完没问题,之后,就开始编辑scoketio页面内容,思路就是创建socket示例,然后将方法暴露出去:

var scoketio={}  //要暴露出去的对象 
var scoket_io=require('socket.io')
var cors=require('cors')
scoketio.getscoketio=function(server)
{
    var io=scoket_io(server,{cors:true});   //server就是服务器监听的对象
    io.listen(1234)     //这里我将重新给一个端口
    io.on('connection',function(socket)  //监听connect行为,传入一个socket对象
    {
        console.log('a user has join');
        socket.on('message',function(obj)   //监听message行为,也就是用户发信息的行为
        {
            io.emit('message',obj)  //io向所有用户的窗口广播该socket对象的信息
            console.log(obj.userid+'说:'+obj.content);//控制台输出谁说了什么
        })
    })
}

module.exports=scoketio;

有很多细节,所以我直接先给出全部代码,后面再一点点讲解,然后是如何在www中引用这个页面,首先是在开头引入刚刚写的页面,在已经挂载好app对象的server后面,使用暴露出来的getsocketio方法将server作为参数传递进去给io即可:

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('myexpressjsj:server');
var http = require('http');
var io=require('../scoketio')  //这个

/**
 * Create HTTP server.
 */

var server = http.createServer(app);
io.getscoketio(server)  //这个

之后来写一个简单的html5页面,测试下能不能接口能不能用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="http://localhost:3000/socket.io/socket.io.js"></script>
    <title>xjd的聊天室</title>
</head>
<body>
    <script>
        this.socket=io.connect('ws://localhost:3000')  //与刚刚的服务区建立连接,使用的是wx协议
        this.user={
            username:'xjd',
            userid:Date.now()
        }
        this.socket.on('message',function(obj)  //监听message行为,会触发里面的function
        {   
            console.log(obj);
        })
    </script>
</body>
</html>

里面有一些细节还是要说一下,首先,io我们可以理解为是包括所有socket用户的大对象,通过emit方法可以将选中的行为向所有用户触发,比如上面的message行为,但是这个行为是在前端定义的,也就是说触发前端所有用户页面所监听的message方法,比如我们现在启动express服务器

npm run start

然后在浏览器打开两个窗口,url都是localhost:3000/index.html,空白页面是正常的,打开控制台(F12键),然后打开服务器终端就会看见两行a user has join就是正常的:
后台
然后在控制台输入this.user来确定两个窗口的id:
userid
接下来测试这个message,使用this.socket.emit(‘message’,{…this.user,content:‘zsy我爱你’}),会看到两个窗口同步console.log()了这个信息:

在这里插入图片描述

所以。来解释下为什么,通过触发message方法,服务器在监听这个方法,代码就是:

socket.on('message',function(obj)
        {
            io.emit('message',obj)
            console.log(obj.userid+'说:'+obj.content);
        })

所以打开服务器终端也会出现下面的句子:
在这里插入图片描述
同时,由于服务器的这个监听里面,使用io的emit方法向所有的socket用户触发了message行为,当前端监听到message时,所有用户会触发下面的代码:

this.socket.on('message',function(obj)
        {   
            console.log(obj);
        })

因此才会出现上述窗口的现象了,所以后续需要添加更多的行为时,只需要按照相同的思路即可,然后如果是要对特定的用户触发message,就需要在io后面跟一个socket的id来标识,然后在emit,具体方法可以上官网看看。
那今天文章就到这里啦,第一次手写了这么长的blog!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是使用 TypeScript 和 Socket.IOExpress.js 创建 WebSocket 服务器的示例代码: 首先,确保你已经安装了 TypeScript、Express.js 和 Socket.IO: ``` npm install typescript express socket.io ``` 在项目根目录下创建一个 `tsconfig.json` 文件,用于配置 TypeScript 编译器: ```json { "compilerOptions": { "target": "es6", "module": "commonjs", "outDir": "./dist", "esModuleInterop": true }, "include": ["./src"] } ``` 接着,在项目根目录下创建一个 `src` 目录,并在其创建一个 `index.ts` 文件,用于启动 Express.js 应用程序和 WebSocket 服务器: ```typescript import * as express from "express"; import * as http from "http"; import * as socketio from "socket.io"; const app = express(); const server = http.createServer(app); const io = socketio(server); io.on("connection", (socket) => { console.log("A user connected"); socket.on("disconnect", () => { console.log("User disconnected"); }); }); server.listen(3000, () => { console.log("App listening on port 3000"); }); ``` 在上面的代码,我们创建了一个 Express.js 应用程序、一个 HTTP 服务器和一个 Socket.IO 服务器。然后,我们在 `io.on("connection")` 回调函数处理 WebSocket 连接和断开连接事件。 最后,修改 `package.json` 文件的 `"start"` 命令,让 TypeScript 编译器编译 TypeScript 代码,并启动 Express.js 应用程序和 WebSocket 服务器: ```json { "name": "typescript-socketio-example", "version": "1.0.0", "scripts": { "start": "tsc && node ./dist/index.js" }, "dependencies": { "express": "^4.17.1", "socket.io": "^4.0.1" }, "devDependencies": { "typescript": "^4.3.4" } } ``` 现在,运行 `npm start` 命令,你应该能够在浏览器打开 `http://localhost:3000`,并在控制台看到 WebSocket 连接和断开连接事件的日志输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值