socket.io中文api博客地址:https://blog.csdn.net/u010528747/article/details/54341751
一、socketio开发时的使用范围
wifi的IP动态分配机制,socket属于可靠连接,在wifi中,其他设备(pc,手机)访问都没法通过ip访问,虽然能访问http协议的服务,但socket不行。
二、Express中的使用
express中的代码:
先下载 npm i socket.io 
socket.on   是接收数据
io.emit     是发送数据
server.listen()    一定要新开一个端口,它代表socket.io的通信端口
socket.emit        发送的数据应该为字符串格式,所以每次用JSON.stringfy()来格式化一下,再在socket.on时JSON.parse()
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | const app = require("express")();const server = require('http').createServer(app);
 const io = require('socket.io')(server);
 
 io.on('connection', socket => {
 
 socket.on('message', data => {
 console.log("服务器收到消息" + data);
 
 io.emit('message', data);
 })
 
 
 socket.on('disconnect', function () {
 io.emit('leave', socket.nickname + ' left')
 })
 });
 server.listen(8000)
 
 | 
三、前端代码
下载 npm i socket.io-client
| 12
 3
 4
 5
 6
 
 | import io from "socket.io-client";const socket = io("ws://localhost:8000");
 
 socket.on("message", data => console.log(data))
 socket.emit("message","aaaa");
 console.log("向服务器发送消息")
 
 | 
四、socket.io私发消息
socket.id是对客户端的唯一值,和session.id差不多一个意思,每次客户端连接socket.id都会变。
关键语法:
socket.to(session.id).emit(‘message’, data)    私发给指定session.id的客户端消息
socket.emit(‘message’, data)	给socket客户端发消息
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | module.exports = app => {const server = require('http').createServer(app);
 const io = require('socket.io')(server);
 let usersObj = {}; //存放登录的用户的socket.id
 io.on('connection', socket => {
 // 接收发的消息
 socket.on('message', data => {
 // 把发送方的id值当做key值,socket.id当value值存放在usersObj,每次刷新页面socket.id都会
 let msgData = JSON.parse(data);
 usersObj[msgData.from] = socket.id;
 
 console.log("服务器收到消息" + data);
 // 将消息私发给指定的客户端
 socket.to(usersObj[msgData.to]).emit('message', data);
 // 给socket客户端发消息
 socket.emit('message', data);
 })
 });
 server.listen(8000)
 }
 
 |