安装 node

创建一个目录例如socketio

在目录下执行

npm install socket.io
npm install redis

 

client:  代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>socket.io</title>
<meta name="keywords" content="">
<meta name="description" content="">
</head>

<body>

    <script src="node_modules/socket.io/client-dist/socket.io.js"></script>
    <script>

const socket = io("ws://localhost:3000");

socket.on("connect", () => {
  console.log(socket.id); // 输出客户端的id
});
// send a message to the server
socket.emit("hello from client", 5, "6", { 7: Uint8Array.from([8]) });

// receive a message from the server
socket.on("hello from server", (...args) => {
  console.log(args)
});
    </script>
</body>
</html>

Server.mjs  代码如下: 使用 redis 存储客户端socket.id,参考https://socket.io/docs/v4/rooms/

import { createServer } from "http";
import { Server } from "socket.io";
import redis from 'redis';

const httpServer = createServer();
const io = new Server(httpServer, {
  cors: {
    origin: "*"
  }
});

httpServer.listen(3000);

var client = redis.createClient()//用于存储客户端socket.id
/*
createClient({
  url: 'redis://alice:foobared@awesome.redis.server:6380'
});*/


await client.connect();


client.on("error", function (err) {
  console.log("Error " + err);
});


 io.on("connection", (socket)  => {
  // send a message to the client
  console.log(socket.id);//打印客户端socket的id
  socket.emit("hello from server", 1, "2", { 3: Buffer.from([4]) });

  // receive a message from the client
  socket.on("hello from client", async (...args) => {

// Save the socket id to Redis so that all processes can access it.
await client.set("mastersocket", socket.id);

const value = await client.get('mastersocket');
    console.log('ssssssssssss',value);
 
    setInterval(function(){ 

      io.to(value).emit("hello from server", 1, value, { 3: Buffer.from([4]) });//向指定客户端发送消息

     }, 3000);
    
    console.log('message: ' + args);
  });
});

运行node Server.mjs测试

socket.io使用示例–向指定客户端发消息
标签: