socket接收的消息怎么更新到页面_利用socketio实现简易即时消息服务

背景简介

以前开发HTTP服务器更多使用的是python语言中的Flask框架来完成,但是在最近的业务中涉及到在web页面中实时获取消息更新,这个时候我能想到的解决方案

1.写一个循环ajax请求,不断请求后台服务器然后更新数据

2.借助websocket协议从服务端推送新数据到web端

3.socketio

考虑到轮询ajax的伪实时和带宽成本,以及websocket的兼容性后,决定采取方案3 socketio

socketio这个协议本身和node配合会非常好,所以决定学习一下node应用的编写,当然Flask本身也有第三方中间件flask-socketio对应的实现

编写node应用一般使用web framework是以下两个

1.express

2.koa

Express

express相对来说比较简单一点,如你所想,第一个例程通常都是由Hello world开始

万能的Hello world

开始之前记得安装express

npm i express

以下例程来自socketio官方上

index.js文件内容如下

//index.jsvar express = require('express');var http = require('http')var socketio = require('socket.io')var app = express();var server = http.Server(app);var io = socketio(server);app.get('/', (req, res) => {  res.sendFile(__dirname + '/index.html');});// 注册新连接到来的回调函数io.on('connection', (socket) => {  console.log('one connect comming');});server.listen(3000, () => {  console.log('listening on *:3000');});

index.html文件内容如下

                      Socket.IO chat     Send      

编写完成之后调用node index.js运行服务器,用浏览器访问一下localhost:3000看看效果,如果程序正常应该在控制台和浏览器端可以看到效果

513224e3ed8ffc9510ccee8a8fdd7c01.png

终端输出

7801cf48758a6c861a39f6e278bbbddb.png

浏览器端

消息同步功能实现(简易的聊天室)

如果需要实现在多个浏览器上同步消息,实现原理为由客户端向服务端发送消息,然后再由服务端向客户端推送消息,示意图如下

21026320123fc9977789d94d251cbaa3.png

通信原理图

要完成上图的效果,我们首先需要实现客户端向node服务发送聊天事件,编写index.html,将其中的script标签内的脚本修改如下代码如下

然后我们需要实现的是服务向其它客户端推送chat事件,

调用on方法即可注册回调函数, 其中第一个参数'connection'为事件名称, 第二个参数为回调函数,将index.js代码修改成下图

// 注册新连接到来的回调函数io.on('connection', (socket) => {  socket.on('chat', (msg) => {    //io.emit用来向所有已经建立连接的socket发送事件    io.emit('chat', msg);  });});

效果动态图,我这边是使用4个浏览器容器来模拟多人同步的场景

a2697e246540d8a98f148ac5e71cf45c.gif

聊天室效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值