Tag: socket.io

我应该使用什么? Socket.io客房还是Redis pub-sub?

很简单的问题。 我正在使用nodejs作为我的后端构build一个实时游戏,我想知道是否有任何信息可用,哪一个更可靠,哪个更有效? 我在我的代码中大量使用了Redis和Socket.io。 所以我想知道我应该使用Socket.io的房间还是使用redis的pub-sub更好? 更新:刚刚意识到有一个非常重要的原因,你可能想使用redis pub / sub over socket.io房间。 在发布给侦听器的情况下,使用Socket.io房间,(浏览器)客户端收到消息,使用redis实际上是收到消息的客户端(服务器端)。 因此,如果要通知所有(服务器)客户端特定于每个客户端的信息,并在传递给浏览器客户端之前做一些处理,则最好使用redis。 使用redis,你可以直接触发一个事件来生成每个用户的个人数据,就像socket.io一样,你必须一次生成所有的用户唯一的数据,然后循环遍历它们并发送他们的个人数据,房间的目的,至less对我来说。 不幸的是对于我的目的,我现在坚持使用redis。 更新2:结束开发插件只使用2个Redis连接,但仍然允许单个客户端处理,请参阅下面的答案….

我可以从Socket.io访问cookie吗?

我想在cookie中设置一些用户信息,并能够在连接上访问它,这是可能的吗?

使用TCP负载均衡器代理W​​ebSockets而不需要粘性会话

我想使用Amazon Elastic Load Balancer将WebSocket连接代理到多个node.js服务器。 由于Amazon ELB不提供实际的WebSocket支持,我需要使用它的香草TCP消息传递。 不过,我试图了解这将如何工作没有某种粘滞会话function。 据我所知,WebSockets的工作原理是首先从客户端发送HTTP升级请求,由服务器通过发送正确处理密钥authentication的响应来处理。 服务器发送该响应并被客户端批准后,该客户端与服务器之间就存在双向连接。 然而,假设客户端在批准服务器响应之后将数据发送到服务器。 如果将数据发送到负载平衡器,然后负载平衡器将该数据中继到不处理原始WebSocket升级请求的其他服务器,那么这个新的服务器将如何知道WebSocket连接? 或者,客户端是否会自动绕过负载平衡器,并直接将数据发送到处理初始升级的服务器?

是否socket.io发出适当的callback?

最近我一直在使用socket.io,发现这个有趣的事情,我可以发出这样的函数callback。 我开始像这样在客户端发出: client.emit('eventToEmit', dataToEmit, function(error, message){ console.log(error); console.log(message); }); 然后我可以像这样从服务器端发起一个callback: client.on('eventToEmit', function(data, callback){ console.log(data); callback('error', 'message'); }); 一切工作正常,没有错误,但我有兴趣,如果做这样的事情是适当的,因为我没有看到任何类似的文件或任何例子到目前为止。

Socket.io:命名空间,渠道和合作

我有一个Node.js Web服务器,它运行一个使用Socket.io创build的顶层套接字服务器。 基本上,这工作。 我现在想要实现的是,连接的客户端被分组。 所以可能会有一些组成A组的客户和其他一些组成B组的客户。他们应该通过特定的URL( localhost:3000/A或localhost:3000/B来select他们属于哪个组。 在Socket.io中,我现在想发送消息给A组中的所有客户端,或者B组中的所有客户端或所有客户端,而不必查看他们的组。 这基本上就像是和房间聊天,你可以给特定房间内的所有客户或任何客户留言,不pipe他在哪个房间。 使用Socket.iodevise这样一个系统的最佳方法是什么? 到目前为止,我一直在尝试使用命名空间,这基本上可以创build组A和B,但是我无法将消息发送到所有客户端,无论他们在哪个房间。至less我不知道该怎么做这个。 我应该如何build模? 什么是我应该寻找的正确的条件? 更新:根据@sdedelbrock的答案,我可以使用命名空间或房间: 如果使用命名空间,我不能长时间发送给每个人,不pipe他们的命名空间。 这是因为io.sockets是io.of('')的快捷方式,当然这与命名空间不再匹配。 这意味着我应该使用房间,但是我想知道房间和命名空间之间的语义差异是什么。 简而言之:为什么同一个(?)想法有两个概念?

Socket.IO客户端.js文件位于何处?

我想获得socket.io(节点库)工作。 我有服务器端JS工作,它正在聆听。 socket.io网站简单地说: <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> 这很好,但是,我导入的是什么JS文件! 我进入了node_modules目录,在那里我通过npm安装了socket.io,而在socket.io/lib/里面是socket.io.js文件。 但是,这是服务器端(使用短语require() ,客户端上有哪些错误)。 我花了一个小时四处看看,我无法得到任何客户端.js文件的工作。 我错过了什么?

我可以在heroku上设置socket.io聊天吗?

我有一个简单的socket.io聊天应用程序,我已经上传到新的Heroku'雪松'堆栈之一。 现在我几乎有所有的工作,但我已经遇到了一个绊脚石。 在我的本地主机上,我从客户端打开一个到套接字服务器的连接: // lots of HTML omitted socket = new io.Socket('localhost', {port: 8888}); 但是在Heroku上,我显然必须用别的东西替代这些值。 我可以从服务器上的过程对象获取端口,如下所示: port = process.env.PORT || 8888 并传递给视图。 但是,我用什么来代替'localhost'呢?

套接字IO重新连接?

disconnect连接后,如何重新连接到套接字io? 这是代码 function initSocket(__bool){ if(__bool == true){ socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false}); socket.on('connect', function(){console.log('connected')}); socket.on('disconnect', function (){console.log('disconnected')}); }else{ socket.disconnect(); socket = null; } } 如果我做的initSocket(true) ,它的作品。 如果我做initSocket(false) ,它断开连接。 但是,然后如果我尝试使用initSocket(true)重新连接,连接不再工作。 我怎样才能使连接工作?

Socket.io连接用户数

我终于得到了socket.io正常工作,但我遇到了一个奇怪的问题。 我不确定这是否是最好的方法,但我正在使用: io.sockets.clients().length 这将返回连接到我的服务器的客户端的数量。 问题是在用户连接和断开连接之后,数字开始保持高于应有的水平。 例如,如果我连接并问我的朋友,这个数字就会上升,这是正确的。 但是当我们开始断开和重新连接的数量不减less。 我正在运行vmware ubuntu服务器上的node.js和sockets.io服务器。 有谁知道为什么这是或有一个更好的方法来找出有多less人连接到服务器?

为socket.io/nodejs进行身份validation

我有一个PHPlogin,用户放在一个用户名/密码,它检查login信息的MySQL数据库。 如果通过身份validation会话是通过PHP创build的,用户现在可以通过php会话访问系统。 我的问题是,他们一旦通过PHP /会话进行身份validation,将授权用户看看他们是否有正确的login权限访问与socket.io nodejs服务器的过程是什么? 我不想让这个人有权访问nodejs / socket.io函数/服务器,除非他们通过phplogin身份validation。