前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >socktIo的客户端与nodejs服务器端代码示例

socktIo的客户端与nodejs服务器端代码示例

原创
作者头像
前端_AWhile
修改于 2019-09-16 03:12:56
修改于 2019-09-16 03:12:56
7.1K0
举报
文章被收录于专栏:前端一会前端一会

socketIo客户端代码,客户端需引入socket.io-client:

代码语言:txt
AI代码解释
复制
import io from 'socket.io-client';
//服务端js在 private_materials/node/test17/service.js
// WebSocket协议-Socket.io 客户端API https://www.jianshu.com/p/d5616dc471b9   https://www.w3cschool.cn/socket/socket-k49j2eia.html
// WebSocket协议-Socket.io 服务端API https://www.jianshu.com/p/8d28d3e0b43e   https://www.w3cschool.cn/socket/socket-odxe2egl.html

/**
 * options (对象)path (字符串) 命名路径,用来捕获服务器端的服务,默认为socket.io
 * reconnection (布尔型)是否自动重新建立连接,默认为true
 * reconnectionAttempts (Number) 尝试重连的次数,默认为无限次
 * reconnectionDelay (数值型) 重寻创建连接的延迟时长,默认为1000毫秒,受randomizationFactor正负加减的影响。
 * 比如默认的初始化延迟将在500至1500毫秒之间。reconnectionDelayMax (数值型)最大的重连等待时间,默认为5000毫秒。每一次尝试都会以两倍的增量增加重连的时间。
 * randomizationFactor (数值型)默认为0.5,最小为0,最大为1
 * timeout (数值型) connect_error和connect_timeout事件触发前的延迟时间,默认为20000毫秒
 * autoConnect (布尔型) 如果设置为fasle,你不得不手动调用manage.open函数
 * query (对象):当连接到一个命名空间,额外的查询参数将被发送(随后可以到服务器端查找socket.handshake.query对象)
 * parser (解析器):默认的为一个Parser实例
 * 断开连接后等待首次尝试重连的时间最大为10秒,超出以10秒计算,第一次重连失败开始到第二次重连开始的间隔时间最大为10秒,超出以10秒计算,之后的每次重连间隔等待时间均为上一次间隔时间的2倍,
 */
const socket = io( "http://192.168.8.52:3000/chat" );

// 连接成功监听
socket.on('connect', function () {
    console.log( 'socket 已连接啦' );
    console.log( socket.id );   // 标识socket session独一无二的符号,在客户端连接到服务端被设置
});

// 监听服务器端触发 serviceEventA 事件,并接收发来的数据
socket.on( "serviceEventA", function( data ){
    console.log( data );
} )
// 监听服务器端触发 serviceEventC 事件,并接收发来的多个参数数据
socket.on( "serviceEventC", function( data1, data2, data3 ){
    console.log( data1 );
    console.log( data2 );
    console.log( data3 );
} )
// 监听服务器端触发 serviceEventB 事件,并接收发来的数据,再将获取的数据发送回服务器端
socket.on( "serviceEventB", function( data, fn ){
    console.log( data );
    fn( data + ' aaaa' )
} )

socket.on( "message", function( data ){
    console.log(  "服务器发送的send事件:" + data );
} )

setTimeout( function(){
    // 客户端主动向服务器端发送数据
    socket.emit( "clientEventA", "i am clientA" )
    socket.emit( "clientEventB", "i am clientB", function( data ){
        console.log( data );
    } )
    socket.send( "这是一个客户端发送的send操作,由服务器端监听message事件获取此消息" )
}, 5000 )



// 连接错误触监听
socket.on('connect_error', function(error){
    socket.send( {userName: 'zh', message: '9999'} )
    console.log( error );
});

// 断开连接监听
socket.on( "disconnect", function( reason ){
    console.log( reason );
    console.log( 'socket已断开连接' );
} )

// 页面关闭时手动关闭客户端对服务器的链接               
$(window).on('beforeunload unload', function() {  
    socket.send( {userName: 'nitx1', message: '9999'} ); 
    socket.close();
}); 

// 重连API
socket.on('reconnecting', function( attempt ){
    console.log('reconnecting尝试重连时触发事件');
    console.log( '重连次数:' + attempt );
});
socket.on('reconnect_attempt', function( attempt ){
    console.log('reconnect_attempt尝试重连时触发事件');
    console.log( '重连次数:' + attempt );
});
socket.on('reconnect', function( attempt ) {
    console.log('成功重新连接到服务器');
    console.log( '重连次数:' + attempt );
});
socket.on('reconnect_error', function(error){
    console.log( "重连错误" );
    console.log( error );
});
socket.on('reconnect_failed', function(){
    console.log( "重连失败" );
});

客户器端package.json所需安装包:

代码语言:txt
AI代码解释
复制
"devDependencies": {
    "socket.io-client": "^2.2.0",
 }

服务器端代码,express + socket.io:

代码语言:txt
AI代码解释
复制
// 客户端js代码在 private_materials\webapck4\webpack4~multHtml
var app = require('express')();     //初始化express,app作为HTTP服务器的回调函数
var http = require('http').createServer(app);
var io = require('socket.io')(http);    //传入http对象初始化socket.io的实例

const chat = io.of('/chat');

chat.on('connection', function (socket) {
    // 触发事件 serviceEventA, 发送消息给客户端
    socket.emit('serviceEventA', 'can you hear me A?' );
    // 触发事件 serviceEventC, 发送多个参数消息给客户端
    socket.emit('serviceEventC', 'can you hear me C?', 'second param', 'third param' );
    // 触发事件 serviceEventB, 发送消息给客户端,再接收客户端返回的数据
    socket.emit('serviceEventB', 'can you hear me B?', ( data )=>{
        console.log( data )
    });
    
    // 监听客户端事件 clientEventA,获取客户端发送过来的消息
    socket.on( "clientEventA", ( data )=>{
        console.log( data );
    } )
    socket.on( "clientEventB", ( data, fn )=>{
        console.log( data );
        fn( data + '1124' );
    } )
    socket.on( "message", function( data ){
        console.log( "客户端发送的send事件:" + data );
    } )

    setTimeout( function(){
        socket.send( "这是一个服务器端发送的send操作,由客户器端监听message事件获取此消息" )
    }, 5000 )
});


http.listen(3000, function () {
    console.log('listening on *:3000');
});

服务器端package.json所需安装包:

代码语言:txt
AI代码解释
复制
"devDependencies": {
    "express": "^4.17.1",
    "socket.io": "^2.2.0"
 }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【实战记录】WebSocket在vue2中的使用
官方说, WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。但是我对网络协议并不了解,用实际用途去解释它就是,它支持服务端主动给客户端发送消息。
一尾流莺
2022/12/10
3.4K0
使用Vue+Node.js+Express+Socket.io实现简易聊天室Demo并解决跨域问题
github :https://github.com/DannyZeng2/EasyChat- SimpleDemo 完整版聊天室正在更新中,欢迎大家交流:https://www.jianshu.com/p/47c221ccd393 Socket.io的默认事件列表 服务端事件 事件名称 描述 connection socket连接成功之后触发,用于初始化 message 客户端通过socket.send来传送消息时触发此事件 anything 收到任何事件时触发 disconnect socket失去连
前端小tips
2021/12/11
1.9K0
使用Vue+Node.js+Express+Socket.io实现简易聊天室Demo并解决跨域问题
腾讯云搭建多终端《你画我猜》Socket服务器
金朝麟
2017/01/19
16.6K1
腾讯云搭建多终端《你画我猜》Socket服务器
websocket深入浅出
答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
全栈程序员站长
2022/09/14
2.3K0
websocket深入浅出
基于 socket.io 快速实现一个实时通讯应用WebSocket概念实现用socket.io实现一个实时接收信息的例子分析webSocket协议参考文章
随着web技术的发展,使用场景和需求也越来越复杂,客户端不再满足于简单的请求得到状态的需求。实时通讯越来越多应用于各个领域。
用户2356368
2019/05/07
2.5K0
基于 socket.io 快速实现一个实时通讯应用WebSocket概念实现用socket.io实现一个实时接收信息的例子分析webSocket协议参考文章
使用socket实现即时通讯聊天室
websocket早在几年前就已经很流行了,主要就是用于即时通讯这一方面应用,可以是聊天,也可使是直播流传输等等。
踏浪
2019/11/28
2.7K0
使用socket实现即时通讯聊天室
Nodejs+socket.io搭建WebRTC信令服务器
我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了。
音视频_李超
2020/04/01
8.4K2
Nodejs+socket.io搭建WebRTC信令服务器
基于 socket.io 快速实现一个实时通讯应用
随着web技术的发展,使用场景和需求也越来越复杂,客户端不再满足于简单的请求得到状态的需求。实时通讯越来越多应用于各个领域。
用户2356368
2022/04/07
1.7K0
基于 socket.io 快速实现一个实时通讯应用
socket.io
本译文来源于https://socket.io/get-started/chat/,不足之处请多批评指正。 最近在学些vuejs和websocket相关技术,使用了websocket的两个封装的库vue-socket.io和vue-websocket
ccf19881030
2020/04/10
4.1K0
socket.io
《 Socket.IO》 解决 WebSocket 通信!
大家好呀,我是小菜~ 本文主要介绍 Socket.IO 微信公众号已开启,小菜良记,没关注的同学们记得关注哦! 在介绍 Socket.IO 之前, 我们先考虑一个问题, 如果这个时候有个需求, 类似
蔡不菜丶
2022/09/21
2.4K0
《 Socket.IO》 解决 WebSocket 通信!
基于node+socket.io+redis的多房间多进程聊天室
本文作者:IMWeb jaychen 原文出处:IMWeb社区 未经同意,禁止转载 一、相关技术介绍: 消息实时推送,指的是将消息实时地推送到浏览器,用户不需要刷新浏览器就可以实时获取最新的消息
IMWeb前端团队
2018/01/08
3.1K0
基于node+socket.io+redis的多房间多进程聊天室
低延迟双向实时事件通信 Socket.IO
Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟,双向和基于事件的通信。
Tinywan
2024/08/27
3620
低延迟双向实时事件通信 Socket.IO
使用node、Socket.io 搭建简易聊天室
Socket.io是一个WebSocket库,会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,而且支持的浏览器最低达IE5.5。 Socket.io 服务器 和 Socket.io 客户端之间全双工通信信道 尽可能使用WebSocket 连接建立(”尽可能“就说明要求客户端和服务端都必须使用,HTTP 长轮询`作为后备。 在了解socket-io前,我们先了解三种通信方式和Http轮询。
can4hou6joeng4
2023/11/29
4630
nodejs多房间web聊天室[通俗易懂]
一年之前的做的小项目,过了许久,翻出当时的PPT文档总结一下。源码下载:https://github.com/CreekLou/chatRoom
全栈程序员站长
2022/06/25
1.6K0
nodejs多房间web聊天室[通俗易懂]
安装完 socket.io 以后,客户端 404 问题
你监听的是8080端口,所以是http://localhost:8080/socket.io/socket.io.js
全栈程序员站长
2022/07/11
1.9K0
HTML5之WebSocket
HTTP协议是一种无状态协议,服务端本身不具有识别客户端的能力,必须借助外部机制,比如session和cookie,才能与特定客户端保持对话。这多多少少带来一些不便,尤其在服务器端与客户端需要持续交换数据的场合(比如网络聊天),更是如此。为了解决这个问题,HTML5提出了浏览器的WebSocket API。
用户7353950
2022/05/10
1.1K0
Vue.js 如何使用 Socket.IO ?
在很多需求业务中,都需要浏览器和服务器实时通信来实现功能,比如:扫码登录(扫码后,手机确认登录,PC网页完成登录并跳转)、订单语言提醒等,这些都是建立在两端实时通信的基础上的。对前端而言,来实现浏览器和服务器实时通信,最好的选择就是Socket.IO库,能够快速的实现两端实时通信功能。
Javanx
2019/09/04
4.9K0
Vue.js 如何使用 Socket.IO ?
搭建简易的物联网服务端和客户端-redis+websocket(二十五)
1)介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 2)官网 https://redis.io/ 3)相关说明
治电小白菜
2020/08/25
2.5K0
搭建简易的物联网服务端和客户端-redis+websocket(二十五)
实现一个简单的WebSocket聊天室
run node index.js,并在浏览器打开 http://localhost:3000,访问成功即可看到
超超不会飞
2020/09/18
1.1K0
实现一个简单的WebSocket聊天室
Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
  采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制。聊天室增加了 注册登录 模块 ,并将用户个人信息和聊天记录存入数据库.
书童小二
2018/09/03
2.7K0
Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
推荐阅读
相关推荐
【实战记录】WebSocket在vue2中的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档