当前位置: 首页 > 面试题库 >

在socket.io中发送自定义数据和握手数据?

巫马昆杰
2023-03-14
问题内容

所以我有一个应用程序,它运行着以Socket.io作为后端的节点js,以普通javascript作为前端的应用程序。我的应用程序有一个登录系统,当前该系统只是让客户端在连接后立即发送其登录数据。

现在,我认为将登录数据与handhakeData一起发送会更好,因此我可以直接让用户在连接时登录(而不是在建立连接之后),或者在登录数据无效时分别拒绝授权。

我认为最好将其他数据放在handshakeData的标头部分中,所以有什么想法可以做到这一点?(如果可能,不必修改socket.io,但是如果这是我可以使用的唯一方法)


问题答案:

正如下面的许多评论所指出的那样,Socket.IO API在其1.0发行版中进行了更改。现在应该通过中间件功能进行身份验证,请参阅“身份验证差异” @
http://socket.io/docs/migrating-from-0-9/#authentication-
differences
。对于旧文档似乎不见了的用户,我将为那些坚持<1.0的人提供原始答案。

客户端

//The query member of the options object is passed to the server on connection and parsed as a CGI style Querystring.
var socket = io("http://127.0.0.1:3000/", { query: "foo=bar" });

服务器端:

io.use(function(socket, next){
    console.log("Query: ", socket.handshake.query);
    // return the result of next() to accept the connection.
    if (socket.handshake.query.foo == "bar") {
        return next();
    }
    // call next() with an Error if you need to reject the connection.
    next(new Error('Authentication error'));
});

前1.0版

您可以将查询:第二个参数中的param传递给客户端的connect(),该参数将在授权方法中在服务器上可用。

我一直在测试。在客户端上,我有:

var c = io.connect('http://127.0.0.1:3000/', { query: "foo=bar" });

在服务器上:

io.set('authorization', function (handshakeData, cb) {
    console.log('Auth: ', handshakeData.query);
    cb(null, true);
});

服务器上的输出如下所示:

:!node node_app/main.js
   info  - socket.io started
Auth:  { foo: 'bar', t: '1355859917678' }


 类似资料:
  • 我有一个自定义的Wordpress插件,可以处理很多事情,包括我的产品的下载页面。这些链接不是指向我的插件的实际PHP页面的路径。例如 但我的插件实际处理下载功能的路径如下: 我已经构建了一个应用程序,使用这些下载链接授予用户购买后下载产品的能力。但是现在我需要发送额外的数据随着网址。当用户点击下载链接时,我如何发送一些额外的_POST美元的数据。我已经试过了 但是当我试图重复myplugin.p

  • 问题内容: 我一直在研究一个Java程序,该程序基本上类似于Minechat(基于文本的应用程序,仅用于查看聊天。)我从来没有真正与网络打交道,因此,问题在于弄清楚如何正确发送数据包。我目前处于与服务器创建握手的位置。经过数小时的研究,我提出了以下代码,但始终会遇到“ Failed!(Exception)”消息。对我来说,一切看起来都是正确的,但就我所知,这可能是100%错误的。如果有人可以指出我

  • 为了向我的服务器发送数据,我需要在连接启动时发送握手消息。如果来自服务器的响应是我期望的握手响应,那么我发送有意义的数据。我最初的解决方案是 当我扩大规模时,这就不太好了,因为我通过tcp调用的次数增加了一倍,因为我只需要在连接启动时发送send handshake,而不是每次都发送send handshake。此外,我计划保持连接的活力。

  • 不仅仅是falcon-agent采集的数据可以push到监控系统,一些场景下,我们自定义的一些数据指标,也可以push到open-falcon中,比如: 线上某服务的qps 某业务的在线人数 某个接⼝的响应时间 某个⻚面的状态码(500、200) 某个接⼝的请求出错次数 某个业务的每分钟的收⼊统计 …… 一个shell脚本编写的,自定义push数据到open-falcon的例子 # 注意,http

  • 问题内容: 我正在使用Java中的Smack API连接到XMPP服务器。 我想发送这样的自定义消息包: 我猜想我创建了自己的Packet,并以toXML()方法返回此XML。但这似乎不起作用。 任何帮助,将不胜感激。 问题答案: 您需要定义一个 自定义类 , 该类 应 实现ExtensionElement (由@Flow定义) 可以在此答案中获得产生以下节的非常详细的解释 其中 Reply 是自

  • 问题内容: 我正在使用Socket.IO主页(http://socket.io/)中的示例。它可以正常工作,但是在发送数据的时间与从另一端接收到数据之间存在巨大的延迟。 我正在使用XAMPP,我的目录中有socket.html,并在浏览器中使用“ http://localhost/socket.html”导航到它,并且我的服务器在端口8080上侦听。 服务器: HTML档案: 问题答案: 我发现了