WebSocket之socket.io的基本使用

这篇具有很好参考价值的文章主要介绍了WebSocket之socket.io的基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Socket.IO 是一个WebSocket库,可以在客户端和服务器之间实现低延迟、双向和基于事件的通信。它建立在 WebSocket 协议之上,并提供额外的保证,例如回退到 HTTP 长轮询或自动重新连接。

基本使用

安装socket.io

yarn add socket.io

 新建js文件与html文件内容如下

var http = require('http');
var io = require('socket.io');
var server = http.createServer((req,res)=>{
});
server.listen(2183);
// 监听 connection
io.listen(server).on('connection',(user)=>{
	setInterval(()=>{
		user.emit('test','哥们我主动来了'+Math.random());
	},1000);
});
<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8">
    // 引用脚本,固定写法
    <script type="text/javascript" src='http://localhost:2183/socket.io/socket.io.js'></script> 
    <script type="text/javascript">
        // 连接服务
    	let connection = io.connect('ws://localhost:2183');

        connection.on('test',(str)=>{
    		console.log(str)
    	})
    </script>
    <title></title> 
</head>
<body>
</body>
</html>

这个时候启动node后,浏览器打开html可以看到服务器推送的信息:

 socket.io.js,前端基础,javascript,前端,websocket,网络协议

现在来看一下上面代码,

on('connection',(user)=>{
    setInterval(()=>{
        user.emit('test','哥们我主动来了'+Math.random());
    },1000);
})

这里的user其实就是当前访问服务器的一位用户,user.emit(key,value) 就是服务器推送消息给当前user前台的方法,key就是接收时的唯一标识,value就是传输的值。

对应的,接收消息的方法就是on(key,()=>{}),推送与接收方法在前台与服务端都是通用的,

前台 -> 后台
connection.emit(key,value)
connection.on(key,(str)=>{
})
后台 -> 前台
connection.emit(key,value)
connection.on(key,(str)=>{ 
})

案例练习 

已经了解基本使用后,我们可以来实现一个小功能,先创建html文件如下:

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <script type="text/javascript" src='http://localhost:2183/socket.io/socket.io.js'></script>
    <title></title> 
    <script type="text/javascript">
    	onload=()=>{
    		let conn=io.connect('ws://localhost:2183');
            // 点击按钮将输入框信息发送服务器
    		b.onclick = x=>{
    			conn.emit('msg',t.value)
    		};
            // 接收服务器消息并渲染
    		conn.on('msg',(str)=>{
    			var oLi = document.createElement('li');
    			oLi.innerHTML = str;
    			ul.appendChild(oLi);
    		})
    	}
    </script>
</head>
<body>
<input type="text" name="" id='t'>
<button id='b'>发送</button>
<ul id='ul'></ul>
</body>
</html>

1.实现在A页面发信息,其他在线用户B,C收到消息

上面我们讲到后台emit()只能发送给当前user,那怎么实现给其他用户发呢,这里就将用到broadcast.emit()

io.listen(server).on('connection',(user)=>{
	user.on("msg",(str)=>{
		// 给除了自己的其他user发送
		user.broadcast.emit('msg',str);
	});
});

 效果:

socket.io.js,前端基础,javascript,前端,websocket,网络协议

 2.当有用户断开连接时,推送消息给其他在线用户

user.on('disconnect',()=>{
	user.broadcast.emit('msg','有人下线了!')
});

socket.io.js,前端基础,javascript,前端,websocket,网络协议

3.实现远程拖拽(效果如下)

socket.io.js,前端基础,javascript,前端,websocket,网络协议

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <script type="text/javascript" src='http://localhost:2183/socket.io/socket.io.js'></script>
    <title></title> 
    <style type="text/css">
    *{margin: 0;padding: 0;}
    #div1{width: 200px;height: 200px;background: rgb(182, 71, 123);position: absolute;border-radius: 50%;}
    </style>
    <script type="text/javascript">
    	onload =x=>{
    		var conn = io.connect('ws://localhost:2183');
    		conn.on('style',(json)=>{
    			div1.style.left = json.x+'px';
    			div1.style.top = json.y + 'px';
    		});
    		div1.onmousedown=function(e){
    			var ev = e || event;
    			var l = ev.clientX - this.offsetLeft;
    			var t = ev.clientY - this.offsetTop;
    			document.onmousemove = function(e){
    				var ev = e ||event;
    				var x = ev.clientX - l;
    				var y = ev.clientY - t;
    				conn.emit('divNode',{x:x,y:y})
    				this.style.left = x +'px';
    				this.style.top = y + 'px';
    			}.bind(this);
    			document.onmouseup = function(){
    				this.onmousemove = this.onmouseup = null;
    			};
    			return false;
    		}
    	};
    </script>
</head>
<body>
<div id='div1'></div>
</body>
</html>
var http = require('http');
var io = require('socket.io');

var server = http.createServer((req,res)=>{

});
server.listen(2183);

io.listen(server).on('connection',(user)=>{
	user.on('divNode',(json)=>{
		user.broadcast.emit('style',json);
	})

});

总结 

使用WebSocket可以实现非常多有趣又实用的功能,后面再写一个在线聊天室巩固一下知识。

推荐阅读 


【微信小程序&uniapp系列文章】

【Vue实用插件及技巧系列文章】文章来源地址https://www.toymoban.com/news/detail-721808.html

到了这里,关于WebSocket之socket.io的基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • websocket实时通讯和socket.io实时通信库的使用;心跳机制与断线重连

    https://zh.javascript.info/websocket WebSocket 是一种网络通信协议,就类似于 HTTP 也是一种通信协议。 为什么需要 WebSocket? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 代码解析: 创建WebSocket实例:通过 new WebSocket() 创建一个WebSocket实例。在括号中传入服务器的URL,该URL指定了

    2024年02月16日
    浏览(33)
  • 使用 Node.js 和 Socket.io 构建实时聊天应用程序

    主要是通过简易聊天室熟练掌握 Socket.io 相关方法和运行的过程。 Socket.io 在进行实现简易实时聊天室之前,我们先梳理一下我们需要的功能和流程。 所需功能: 1、告知用户已经连接到聊天室 2、自己发送时,页面展示对应的消息展示,而对方看的到信息是谁发送了什么 3、

    2024年02月13日
    浏览(46)
  • WebSocket 和 Socket.IO

    WebSocket 是一种网络通信协议,它提供了全双工(full-duplex)通信通道,允许服务器和客户端之间进行双向通信。这种通信方式比传统的 HTTP 请求/响应模式更高效,因为它减少了网络延迟,并且只需要一个 TCP 连接就可以进行双向通信。 WebSocket 的工作流程如下:     1. 客户端

    2024年02月11日
    浏览(29)
  • 使用 vue-3-socket.io 插件以及node.js实现实时聊天(1)

     这篇文章使用选项式API的写法,以实现群聊和私聊为主 客户端自然是对应使用vue3框架,服务端使用node.js配合express、http、socket.io、file等库来实现,具体如下: 1、下载所需的依赖 2、做socket客户端配置 注:\\\"http://localhost:3000\\\",该地址端口是对应后面配置服务端时所开放的端

    2024年02月05日
    浏览(35)
  • 使用 Node.js 和 Socket.io 构建可创建、可加入房间的实时聊天室

    通过可以加入房间的聊天室应用程序,首先可以回顾 Socket.io 的基本使用方法和流程,并在此基础上我们学习 join 、 to 两个 API 方法,从而实现简易的可加入房间的聊天系统。 Socket.io 、 express 和 ejs 。 在实现应用程序之前,我们先梳理一下我们需要的功能和流程。 所需功能

    2024年02月16日
    浏览(29)
  • WebSocket的使用方法(JS前端)

    先来一个常用例子 封装的代码 上面的代码就够用,也可以查看我封装好的 WebSocket 代码(包括心跳机制):点击查看 下面详细说明常用的属性和方法 更全面的官网的文档可以去这里看:点击查看 下面是我总结的内容 WebSocket WebSocket 对象提供了用于创建和管理 WebSocket 连接,

    2024年02月02日
    浏览(28)
  • 〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月04日
    浏览(43)
  • socket.io 解决浏览器兼容性(WebSocket)

             在上一篇讲了 npm 上最流行的 WebSocket 库之一的 ws 库,那么本篇就来讲另外一个,就是 socket.io 库,socket.io 其实是一个兼容方案,当浏览器不支持 H5 的情况下就不能够使用上一篇内容讲的 WebSocket ,只能采用其他的方案,socket.io 就解决了关于浏览器的兼容。 Node实

    2023年04月21日
    浏览(39)
  • 〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

    说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费 , 如需要项目实战或者是体系化资源,文末名片加V! 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。 荣誉: 2022年度博客之星Top4、2023年度超

    2024年02月04日
    浏览(42)
  • 〖大前端 - 基础入门三大核心之JS篇㉔〗- JavaScript 的数组的常用方法 (一)

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包