在套接字连接上发送附加数据

如何在套接字连接上更好地发送附加数据?

客户:

socket.on('connect',function(){ //I'd like set some values and pass them up to the node server. }); 

Node.js服务器:

 io.on('connection', function(client){ //I'd like to get the data here. }); 

例如发送用户名或电子邮件地址等

您应该在连接或创build时发送您的数据:

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

随着新版本的socket.io ,在服务器上的事情已经改变:

 var io = require('socket.io')(server); io.use(function(socket, next) { var handshakeData = socket.request; console.log("middleware:", handshakeData._query['foo']); next(); }); 

我有一个不同的方法 – 连接后发出一个事件,数据:

 socket.on('connect',function(){ // Send ehlo event right after connect: socket.emit('ehlo', data); }); io.on('connection', function(client){ // Receive ehlo event with data: client.on('ehlo', function(data) { }); }); 

你可以容纳一个variables/对象,并说,当没有数据的ehlo事件时,其他事件被忽略,直到ehlo被发送。

如果这不能满足,你可以在连接时发送数据,我不会复制代码,但它是在这个答案: https : //stackoverflow.com/a/13940399/1948292

TCP连接build立后, connection事件立即被触发。 没有办法发送任何东西。

你可以做的就是简单地把服务器发送的第一条消息放到那个消息中。 我强烈build议为此推出一些瘦协议,因此您将拥有多种types的消息,并使用这些消息来确定代码如何处理数据。

这也将是更加可扩展的,因为为它提供一个通用的体系结构是相当容易的。 如果你想等待userdata进来,你可以简单地添加一些状态到你的连接。

我发现这里的答案在这方面真的很有帮助: 发送自定义数据与socket.io中的handshakeData一起?

另外,刷新以下文档有助于解释如何将variables绑定到可以在连接期间从套接字对象访问的握手对象: https : //github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization

这是我发送查询数据到nodejs和server.io服务器客户端的代码

 var socket = io.connect(window.location.origin,{query:'loggeduser=user1'}); io.sockets.on('connection', function (socket) { var endp = socket.manager.handshaken[socket.id].address; console.log("query... " + socket.manager.handshaken[socket.id].query.user); }); 

查询… USER1