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()
1 2 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
1 2 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客户端发消息
1 2 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) }
|