socket.io如何即时通信前端配合Node


本文摘自PHP中文网,作者醉折花枝作酒筹,侵删。

本篇文章给大家详细介绍一下socket.io即时通信前端配合Node的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

首先看效果,哈哈哈 还是那么的小
在这里插入图片描述

首先我们需要
新建文件夹
并快速生成一个package.json文件

1

npm init -y  //生成一个package.json

1

2

npm i express

npm i socket.io

新建一个serverRoom.js文件

1

2

3

4

const express = require('express')const app = express()let port =3000app.get('/',(req,res,next)=>{

    res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })

    res.end('欢迎来到express')

    next()})const server = app.listen(port,()=>{console.log('成功启动express服务,端口号是'+port)})

在当前文件所在位置cmd

1

2

3

4

node serverRoom.js 

//或者使用  快速更新serverRoom.js的变化 同步到当前打开的服务器

//可以通过 npm i nodemon -g 下载到全局 使用很是方便 不亦乐乎

nodemon serverRoom.js

成功启动

在这里插入图片描述
在浏览器看一下

在这里插入图片描述
也是没有问题的。下面我们继续写serverRoom.js

1

2

3

4

5

6

const express = require('express')const app = express()let port =3000app.get('/',(req,res,next)=>{

    res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })

    res.end('欢迎来到express')

    next()})const server = app.listen(port,()=>{console.log('成功启动express服务,端口号是'+port)})//引入socket.io传入服务器对象 让socket.io注入到web网页服务const io = require('socket.io')(server);io.on('connect',(websocketObj)=>{  //connect 固定的 

    //链接成功后立即触发webEvent事件

    websocketObj.emit('webEvent','恭喜链接websocket服务成功:目前链接的地址为:http://127.0.0.1:3000')})

前端html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<!DOCTYPE html><html lang="en"><head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <!-- 通过script的方式引入 soctke.io -->

    <script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>

    <!-- 为了操作dom方便我也引入了jq -->

    <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>

    <title>myWebsocket</title></head><body>

    <p class="myBox">

        <input class="inp" type="text"> <button onclick="sendFun()">点我</button>

    </p>

    <script>

        //页面打开自动链接 http://localhost:3000 后端服务

        let mySocket = io("http://localhost:3000") //直接写后端服务地址

        //一直在监听webEvent 这个事件

        mySocket.on('webEvent', (res) => {

            window.alert(res)

        })

        //获取input的输入内容//将来传给服务器

        function sendFun() {

            console.log($('.myBox>.inp').val())

        }

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

当服务启动的时候,前端页面打开会自动链接我们后端服务,链接成功触发 webEvent 事件(名称可以自己定义,前后得统一),前端监听webEvent事件 获取服务器传送过来的内容并通过alert进行了显示。

好的,上面没问题下面就也很好理解:

下面要实现的功能是在input输入框中输入东西,传入服务器,服务器返回数组,前端显示在页面

//当然只是为了学习功能,就不要在乎例子了

看前端Html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<!DOCTYPE html><html lang="en"><head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <!-- 通过script的方式引入 soctke.io -->

    <script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>

    <!-- 为了操作dom方便我也引入了jq -->

    <script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>

    <title>myWebsocket</title></head><body>

    <p class="myBox">

        <input class="inp" type="text"> <button onclick="sendFun()">点我</button>

        <p class="myBoxChild"></p>

    </p>

    <script>

        //页面打开自动链接 http://localhost:3000 后端服务

        let mySocket = io("http://localhost:3000") //直接写后端服务地址

        //一直在监听webEvent 这个事件

        mySocket.on('webEvent', (res) => {

            window.alert(res)

        })

        mySocket.on('sendFunEventCallBack', (res) => {

            console.log(res, 'sendFunEventCallBackRes')

            let data = JSON.parse(res)

            let str = ''

            for (let i = 0; i < data.length; i++) {

                str += `<p>${data[i]}</p>`

            }

            $('.myBoxChild')[0].innerHTML = str        })

 

        //获取input的输入内容//将来传给服务器

        function sendFun() {

            if ($('.myBox>.inp').val() != '') {

                mySocket.emit('sendFunEvent', $('.myBox>.inp').val())

                $('.myBox>.inp')[0].value = ''

            } else {

                alert('输入字符')

                return

            }

        }

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

服务端

1

2

3

4

5

6

7

8

9

10

11

12

const express = require('express')const app = express()let port =3000app.get('/',(req,res,next)=>{

    res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })

    res.end('欢迎来到express')

    next()})const server = app.listen(port,()=>{console.log('成功启动express服务,端口号是'+port)})//引入socket.io传入服务器对象 让socket.io注入到web网页服务const io = require('socket.io')(server);let arr=['恭喜链接websocket服务成功:目前链接的地址为:http://127.0.0.1:3000']io.on('connect',(websocketObj)=>{  //connect 固定的 

    //链接成功后立即触发webEvent事件

    websocketObj.emit('webEvent',JSON.stringify(arr));

    //监听前端触发的 sendFunEvent  事件

    websocketObj.on('sendFunEvent',(webres)=>{

        arr.push(webres)

        //触发所以的 sendFunEventCallBack 事件  让前端监听

        io.sockets.emit("sendFunEventCallBack", JSON.stringify(arr));

    })})

在打开页面后,在input输入值,点击按钮触发sendFun函数,触发自定义事件 sendFunEvent并将input的value传送到服务器,服务器监听sendFunEvent事件,将数据push到数组中,又触发了sendFunEventCallBack事件,将数组JSON字符串化传到前端,前端监听sendFunEventCallBack事件,获取数组,JSON序列化,将数据循环到页面上,这是整个流程。

打开多个前端页面可以进行实时更新,可以进行聊天。

【推荐学习:javascript高级教程

以上就是socket.io如何即时通信前端配合Node的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

node+vue怎么实现简单的websocket聊天功能?(代码示例)

浅谈node实现图片上传的方法

怎么降低node版本

为你的node应用程序选择最佳的js引擎

node+udp实现图片裁剪功能

controller层中node怎么进行数据校验?

node使用iconv-lite对“gbk”格式进行转码

什么是deno?与node.js的区别是什么?

总结nodejs开发中常用的一些模块

node.js怎么卸载?

更多相关阅读请进入《socket.io》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...