socket.io 消息不是广播机制

背景

以为websocket server 的信息是广播给所有的websocket client 的,但是后续发现当一个client 发起一个操作,然后emit 一个message, 这个时间在所有client 端都有监听,但是只有发起的client 端才能接受到这个emitted msg, 而不是我之前想的,所有监听这个时间的client 都能收到。

环境

frontend项目中安装了socket.io-client

javascript 复制代码
import { Socket, io } from 'socket.io-client';
private socketUrl = 'ws://localhost:3000';
private currentSocket = io(this.socketUrl);

ngOnInit() {
    this.currentSocket.on('news', (result) => {
      console.log(`latest news`, result.data);
    });
  }

backend server 中安装了socket.io, 提供websocket 连接。

javascript 复制代码
import { createServer } from 'http';
import { Server } from 'socket.io';

const socketMessageIds = {
  on: {
    getNews: 'getNews',
    addNew: 'addNew',
  },
  emit: {
    news: 'news'
  }
};

function getSuccessResponse(message, data = null) {
  return {
    code: 2000,
    data,
    msg: String(message || '')
  };
}
function getErrorResponse(message, code = -1) {
  return {
    code,
    data: null,
    msg: String(message || '')
  };
}

const httpServer = createServer();
const io = new Server(httpServer, {
  cors: {
    origin: '*'
  }
});
httpServer.listen(3000);

const news = [];

io.on('connection', (socket) => {

  socket.on(socketMessageIds.on.getNews, () => {
    socket.emit(
      socketMessageIds.emit.news,
      getSuccessResponse('send msg successfully~', news)
    );
  });
  
  socket.on(socketMessageIds.on.addNew, (arg: string) => {
    news.push(arg);
    socket.emit(
      socketMessageIds.emit.news,
      getSuccessResponse('send msg successfully~', news)
    );
  });

}
});

另外启动了一个socket.io-client 进程

javascript 复制代码
import { io  } from 'socket.io-client';

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

socket.on('disconnected', () => {
  console.log('disconnected with server');
})

socket.on('connect', () => {

  socket.emit('addNew', 'dongyuhui is the new VP of dongfang zhenxuan' , (res) => {
    console.log(`latest news`, res.data);
  });

  socket.on('news', (res) => {
    console.log('latest news: ', res.data);
	});
});
相关推荐
江城开朗的豌豆16 分钟前
小程序登录不迷路:一篇文章搞定用户身份验证
前端·javascript·微信小程序
aesthetician21 分钟前
React 19.2.0: 新特性与优化深度解析
前端·javascript·react.js
FIN666836 分钟前
射频技术领域的领航者,昂瑞微IPO即将上会审议
前端·人工智能·前端框架·信息与通信
U.2 SSD1 小时前
ECharts漏斗图示例
前端·javascript·echarts
江城开朗的豌豆1 小时前
我的小程序登录优化记:从短信验证到“一键获取”手机号
前端·javascript·微信小程序
excel1 小时前
Vue Mixin 全解析:概念、使用与源码
前端·javascript·vue.js
IT_陈寒1 小时前
Java性能优化:这5个Spring Boot隐藏技巧让你的应用提速40%
前端·人工智能·后端
勇往直前plus1 小时前
CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南
前端·docker·centos·rabbitmq
北海-cherish7 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
2501_915909068 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5