今天是五一周休,写一篇博客
服务端开启socketio服务
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950const http = require('http');const express = require('express');const socketio = require('socket.io');const app = express();const server = http.createServer(app);const io = socketio(server);const io = require('socket.io')(server, {path: '/test', // 只允许test的路径serveClient: false,origin: '', // 允许访问的客户端pingInterval: 10000,pingTimeout: 5000,cookie: false});io.of('/chat').on('connection', socket => {})// 任何一个socket客户端与服务端发生连接io.on('connection', socket => {socket.on('joinRoom', ({ username, room }) => {// 每一个socket都有一个唯一的id 默认加入这个房间const user = userJoin(socket.id, username, room);// 手动加入一个房间socket.join(user.room);// 像连接这个socket的客户端发送消息socket.emit('message', formatMessage(botName, 'Welcome to ChatCord!'));// 向加入这个房间的用户广播消息 除了自己socket.broadcast.to(user.room).emit('message',formatMessage(botName, `${user.username} has joined the chat`));// 向加入这个房间的用户广播消息 包括自己io.to(user.room).emit('roomUsers', {room: user.room,users: getRoomUsers(user.room)});});// Runs when client disconnectssocket.on('disconnect', () => {const user = userLeave(socket.id);});});客户端socket-io写法
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283<script src="/socket.io/socket.io.js"></script>// chat是namespacevar socket = io('localhost:3000/chat');const io = require('socket.io')();io.of('/chat').clients((error, clients) => {if (error) throw error;console.log(clients); // => [PZDoMHjiu8PYfRiKAAAF, Anw2LatarvGVVXEIAAAD]});// An example to get all clients in namespace’s room:io.of('/chat').in('general').clients((error, clients) => {if (error) throw error;console.log(clients); // => [Anw2LatarvGVVXEIAAAD]});// socketio 中间件io.use((socket, next) => {if (socket.request.headers.cookie) return next();next(new Error('Authentication error'));});const socket = io('http://localhost?token=abc');// server-sideconst io = require('socket.io')();// middlewareio.use((socket, next) => {let token = socket.handshake.query.token;if (isValid(token)) {return next();}return next(new Error('authentication error'));});var blob = new Blob(['foo', 'bar'], { type: 'plain/text',endings: 'native' });console.log('size=' + blob.size);console.log('type=' + blob.type);var testEndings = function(string, endings) {var blob = new Blob([string], { type: 'plain/text',endings: endings });var reader = new FileReader();reader.onload = function(event){console.log(endings + ' of ' + JSON.stringify(string) +' => ' + JSON.stringify(reader.result));};reader.readAsText(blob);};testEndings('foo\nbar', 'native');testEndings('foo\r\nbar', 'native');let hello = new Uint8Array([72, 101, 108, 108, 111]); // "Hello" in binary formlet blob = new Blob([hello, ' ', 'world'], {type: 'text/plain'});let img = document.querySelector('img');// make <canvas> of the same sizelet canvas = document.createElement('canvas');canvas.width = img.clientWidth;canvas.height = img.clientHeight;let context = canvas.getContext('2d');// copy image to it (this method allows to cut image)context.drawImage(img, 0, 0);// we can context.rotate(), and do many other things on canvas// toBlob is async opereation, callback is called when donecanvas.toBlob(function(blob) {// blob ready, download itlet link = document.createElement('a');link.download = 'example.png';link.href = URL.createObjectURL(blob);link.click();// delete the internal blob reference, to let the browser clear memory from itURL.revokeObjectURL(link.href);}, 'image/png');