学习 Socket.io

学习 Socket.io

官网:Socket.io

初次学习用于即时通信的技术,现将自己对 Socket.io 的理解记录在此,技术细节可以查看相关文档。

即时通信主要由服务端和客户端构成,服务端有一个,客户端有多个,Socket.io 实现了服务端与客户端的双向通信,因此可以进行即时通信。

简述

Socket.io 主要涉及到两个对象: Server 和 socket (有服务端 socket 和 客户端 socket )。

大致的工作流程: 服务端需要启动一个 Server 进行监听, 客户端起一个 socket 去连接服务端,服务端接受并建立起连接,此时得到服务端 socket 。

服务端

Server API | socket.io

Server

Server 主要功能有监听客户端的连接请求、划分命名空间(NameSpace)、向命名空间(NameSpace)内发送消息。

server.on(eventName, callback)

server 监听事件
主要作用是监听客户端建立连接,连接成功后,服务端 socket 将作为回调函数的参数

  • eventName: 主要是监听 connect 事件,
  • callback: function(socket){ } 回调函数的参数是 socket
const server = require("socket.io")(3000);
server.on("connect", function(socket) {
    console.log("on connect", socket.id);
});

server.of(namespace)

建立一个命名空间(NameSpace)

  • namespace (String|RegExp|Function)
  • Returns Namespace

namespace 可以理解为频道,也可以理解为服务的不同地址或不同路由,可以用来划分业务
server 默认的 namespace 就为 ‘/‘
返回的 NameSpace 对象与 Server 相似

server.on('connect',function(socket){ });
// 等同
server.of('/').on('connect', function(socket){ });

server.emit(eventName[, args])

向所有连接的客户端发送事件

  • eventName: string 自定义事件名称
  • args 发生事件时传递的数据

server - socket

socket 可以理解为服务端与客户端连接而建立的管道,管道两头分别是服务端和客户端。

服务端 socket 监听客户端 socket 发送的事件,也可以向其他房间、其他客户端发送事件。

socket.id

连接身份的唯一标志,是一段字符串

socket.on(eventName, callback)

监听事件客户端 socket 发送的事件

  • eventName 事件名称

    • 包括 disconnect事件,当客户端断开时会监听到此事件
    • 包括 error事件,当发生错误时触发
    • 也可以是自定义事件
  • callback 回调函数,客户端发送的信息将作为回调函数的参数
  • Returns Socket

socket.emit(eventName[, ...args][, ack])

socket 向客户端触发事件

  • eventName 自定事件名称
  • ...args 要发送的各种数据,支持各种类型的数据
  • ack: function 应答函数,在客户端回应后调用
// server code
server.on('connection', (socket) => {
  socket.emit('chat', 'hello', (data) => {
    console.log(data); // data will be 'i got'
  });
});
// the client code
client.on('chat', (name, fn) => {
   fn('i got');
});
  • Returns Socket

socket.rooms

socket 所在房间

socket.join(room[, callback])

进入房间

socket.leave(room[, callback])

离开房间

socket.to(room)

向某房间或其他客户端发送私人消息

客户端

Client API | socket.io

socket

客户端 socket 主要作用是连接服务器,向服务端发送事件,和监听服务端发送的事件。

// 导入
// <script src="/socket.io/socket.io.js"></script>
// or
// const io = require('socket.io-client');
// or
import io from 'socket.io-client';

// 建立连接
// 默认地址
const socket = io();
// 指定地址
const socket = io('http://localhost');
// 指定的 namespace
const socket = io('/news');
const socket = io('http://localhost/news');

socket.id

socket.connected

socket.emit(eventName[, ...args][, ack])

socket.on(eventName, callback)

Event

客户端可监听的各种事件

    socket.on('connect', () => {});
    socket.on('myevent', () => {});
    socket.on('connect_error', (error) => {});
    socket.on('connect_timeout', (timeout) => {});
    socket.on('error', (error) => {});
    socket.on('disconnect', (reason) => {});
    socket.on('reconnect', (attemptNumber) => {});
    //....

原文地址:https://www.cnblogs.com/bfjdbcs/p/12297987.html

时间: 2024-08-30 08:33:37

学习 Socket.io的相关文章

学习socket.io前的网络基础知识准备(白话讲解)

阅读本文章可以解决一下问题: 1 http tcp udp tcp/ip  socket 区别和关系? 2 为什么聊天要用socket.io 基于http不行? 1: 1)tcp/ip tcp/ip 不是协议,而是网络模型 2) TCP和UDP:传输层协议: 3) HTTP:应用层协议:HyperText Transfer Protocal,即:超文本传输协议 基于tcp      本身特点为 请求--->响应 4)SOCKET:TCP/IP网络的API.socket是在应用层和传输层之间的一个

Socket.IO学习日志

说到学习Socket.IO,就不得不先说说WebSocket. WebSocket可以说是一种协议,它建立在无状态的HTTP协议基础之上.从字面的意思来理解,就是将TCP的Socket(套接字)应用在了HTTP中,从而使通信双方建立起一个保持在活动状态连接通道,并且是一个全双工(两个设备之间同时进行双向通信). 与Ajax不同,它并非面向请求和响应,而是可以直接通过send方法进行消息传递.WebSocket可以说是Socket.IO的一个子集,Socket.IO的底层实现其实有5种方式,Web

Node.js学习(1):Node.js 和Socket.IO 实现chat

使用 Node.js 和 Socket.IO 构建简单的聊天程序 在node.js根目录下创建文件夹chat,里面添加两个文件:app.js和index.html app.js var fs = require('fs') , http = require('http') , socketio = require('socket.io'); var server = http.createServer(function(req, res) { res.writeHead(200, { 'Cont

Socket.IO学习之基础入门

原文:http://blog.csdn.net/weichuang_1/article/details/48831957 这里贴出Socket.IO官网 一.Socket.IO的介绍 Socket.IO支持及时.双向与基于事件的交流.它可以在每个平台.每个浏览器和每个设备上工作,可靠性和速度同样稳定. 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户. 实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用. 二进制流传输:从1

我的学习笔记之node----node.js+socket.io实时聊天(2)

废话不多说,直接贴代码吧.注释很详细了. 服务端代码: /** * Created by LZX on 2015/10/7. */(function () { var d = document, w = window, p = parseInt, dd = d.documentElement, db = d.body, dc = d.compatMode == 'CSS1Compat', dx = dc ? dd: db, ec = encodeURIComponent; window.CHAT

nodejs学习(3) express+socket.io

//node var express=require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); app.use(express.static('public')); io.on('connection', function(socket){ socket.on('message', function(

socket.io 学习笔记

概要: 前端页面应用socketio库 后端使用node 搭建 前端如何使用socket.io <!--引入socket.io库 --> <script type="text/javascript" src="./socket.io/socket.io.js"></script> <script type="text/javascript">     //连接服务器     var socket =

【socket.io研究】0.前提准备

WebSocket出现之前,web实时推送,一般采用轮询和Comet技术(可细分为长轮询机制和流技术两种),需要大量http请求,服务器受不了.HTML5定义了WebSocket协议,基于TCP协议,由通讯协议和编程API组成,在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通讯的能力. 建立WebSocket连接的过程是浏览器首先发起一个http请求,在请求头中附带着“Upgrade: WebSocket”头信息,表名申请协议升级,服务器解析后产生应答信息,服务器与客户端的W

使用Node.js的socket.io模块开发实时web程序

首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html