给socket.io添加一个自定义属性,在服务端获取这个值

Posted

技术标签:

【中文标题】给socket.io添加一个自定义属性,在服务端获取这个值【英文标题】:Add a custom attribute to socket.io and get this value in the server 【发布时间】:2016-04-08 05:36:02 【问题描述】:

我正在尝试使用自定义值将属性扩展到客户端的 socket.io,例如:

var socket = io(); socket.customAttr = "123"

并在节点服务器中获取此值,但我在客户端扩展此功能,但在服务器中始终为undefinded

是否存在将 customAttributes 添加到我的 socket.io 的方法?

【问题讨论】:

服务器端/客户端套接字是两个完全不同的实体。没有办法扩展套接字库以能够共享这样的值,如果您可以通过这样做更具体地说明您要完成的工作,那么可能更容易获得更准确的答案 您需要将值从服务器发送到客户端套接字并在客户端存储该值。 客户端和服务器都是不同的上下文。您可以做的是将您的自定义属性发送到您的服务器,然后让服务器存储该属性。可能在一个对象或数组中 打开连接时不能简单的给socket对象增加一个附加属性吗? 不,不可能,正如@Datsik 所说:服务器端/客户端套接字是两个完全不同的实体。没有办法扩展套接字库以能够共享这样的值 【参考方案1】:

对于那些为这个老问题找到解决方案的人:现在(v4.x)你可以使用socket.handshake.query。 客户:

import  io  from "socket.io-client"; 
const socket = io( query:  x: 42  );

服务器:

io.on("connection", (socket) =>  
console.log(socket.handshake.query); // prints  x: "42" 
);

【讨论】:

以上是关于给socket.io添加一个自定义属性,在服务端获取这个值的主要内容,如果未能解决你的问题,请参考以下文章

在Socket.io-client中发送自定义头。

socket.io简单总结

Quasar Vue Socket.io Laravel-Echo 实现

自定义 node-red-node socket.io 客户端建立连接但在收到数据时崩溃?

在 socket.io 中与握手数据一起发送自定义数据?

在 socket.io 中与握手数据一起发送自定义数据?