Articles of socket.io

Socket.io不会stream式传输到多个连接

我正尝试向客户端发送推文,一切正常,只要有一个连接即可。 如果我在浏览器的一个选项卡中input推文,并在新选项卡中打开该页面,则第一个选项卡将停止接收新的推文,只有第二个选项卡会接收到这些推文。 服务器代码。 io.sockets.on('connection', function (socket) { var twitter = require('ntwitter'), util = require('util'), twit = new twitter({ consumer_key: '', consumer_secret: '', access_token_key: '', access_token_secret: '' }); twit.stream('statuses/filter', {'locations':'-124.46, 24.31, -66.57, 49.23'}, function(stream) { stream.on('data', function (data) { data.geo ? socket.emit('twitter', data) : '' }); }); 客户代码: var socket = io.connect() socket.on('twitter', function (data) { […]

Socket.io授权发送错误的cookie?

我正在使用nodejs和套接字来执行授权,但通过浏览器发送的cookie似乎已损坏。 if (data.headers.cookie) { data.cookie = utils.parseCookie(data.headers.cookie); if (data.cookie['connect.sid']) { data.sessionID = data.cookie['connect.sid']; … } } 由于某种原因,sessionID与数据库logging不匹配。 有什么想法吗? 我使用express和mongo作为会话存储。

在node.js中分离游戏服务器和Web服务器

我已经用node.js和socket.io几乎完成了一个基于回合的多人游戏。 我有express.js作为Web服务器和另一个类作为游戏服务器,使用socket.io。 我的问题是这两个在同一个应用程序中运行。 我有一个网页登陆页面,用户可以login,看到他们的球员的详细信息,并在大堂聊天。 现在直到这里,没有什么与游戏逻辑有关。 所以我问自己为什么在这个游戏服务器运行在同一个应用程序与Web服务器。 另外请注意,将来可能会有不同的服务器,如(欧洲服务器,美洲服务器,亚洲服务器等),但是login页面和login机制保持不变。 那么达到这个目标的最佳方法是什么? 我应该做两个单独的node.js应用程序,一个networking服务器和一个游戏服务器。 然而,在这种情况下,我将能够分享套接字和请求之间的会话数据? 另一个缺点是,当浏览网站时,任何意外的行为都可能导致networking服务器抛出exception并closures应用程序,从而closures游戏服务器。

phonegap中的Websockets与使用socket.io的应用程序

我们正在开发一个phonegap应用程序,并使用node.js和socket.io结合使用。 我们知道websockets不被电话支持,但是有一些方法可以使它们工作(https://github.com/anismiles/websocket-android-phonegap和http://anismiles.wordpress.com/2011 / 02/03 / websocket-support-in-android%E2%80%99s-phonegap-apps / ) 唯一的问题是,这些例子使它们通过覆盖通常由socket.io为你照顾的东西来工作。 我的问题:当你的应用程序使用socket.io时,有什么办法可以在phonegap中使用websockets吗? 谢谢。

直接从Rails应用程序发送消息到Node.js和Socket.io推送服务器

我正在构build一个客户端浏览器应用程序,它使用通过AJAX在Ruby Rails 3中编写的服务器端json API。 这一切都很好,没有问题。 但是当其他用户通过API来做事情的时候,我想把数据推送给用户客户端,而不必让客户端不断地在服务器上查询新的数据。 所以我设置了一个Node.js和Socket.IO应用程序来充当推送服务器。 客户端连接到Socket.IO服务器并订阅他们需要的通道。 但问题是我怎样才能让Rails应用程序发送消息到节点服务器在这些渠道发射? 我想我可以在Node服务器上生成一个特殊的路由请求,但有没有更好的方法? 以及如何确保发布的请求来自我的Rails应用程序?

触发断开事件之前,Socket.io需要很长时间

我正在使用node.js和socket.io来做HTML5游戏 我决定把它放在Heroku上 。 Heroku不允许使用WebSocket,所以我必须设置xhr-polling。 ( Heroku上的Socket-io ) io.configure( function() { io.set( "transports", ["xhr-polling"] ); io.set( "polling duration", 10 ); } ); 之前,我只使用networking套接字 io.set( "transports", ["websocket"] ); 现在,当一个客户端断开(closures他的窗口或刷新他的页面)时,事件“disconnect”不会立即在服务器上触发(看起来它正在等待客户端心跳超时)。 client.on( "disconnect", onClientDisconnect ); 如果客户端重新加载,我会在断开连接之前获得多个连接事件。 我的问题在这里。 你有什么想法,为什么xhr-polling不会触发断开事件? 这是一个错误的socket.ioconfiguration? 谢谢。

从C#连接到node.js服务器

我试图写一个简单的服务器,.NET客户端可以连接到交换消息。 来自任何客户的任何消息都将发送给所有其他消息。 node.js + socket.io似乎是一个很好的方式去这里,但我有麻烦。 我使用来自socket.io站点的示例代码,当我从浏览器连接到它时,控制台会根据需要跟踪所有连接和心跳事件,所以我认为我至less已经正确地设置了环境。 我的客户端代码(下面粘贴)与Socket类的示例代码非常相似,但它的行为很奇怪。 在“ProcessConnect”处理程序中,e.LastOperation ==“Connect”和e.SocketError ==“Success”,但服务器端的连接事件处理程序不会触发。 另外奇怪的是,当代码发送“Hello World”时,接收处理程序也会被“Hello World”发回。 我知道这不是来自服务器,因为服务器上没有代码来执行此操作。 我想也许套接字连接到自己或某事,但如果我closures服务器,连接失败。 显然有一些基本的东西我错过了.NET套接字,但我不知道它是什么。 客户: public class NodeClient { Socket _Socket; public NodeClient() { SocketAsyncEventArgs socketState = new SocketAsyncEventArgs(); socketState.Completed += SocketState_Completed; socketState.RemoteEndPoint = new DnsEndPoint("localhost", 81); _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _Socket.ConnectAsync(socketState); } private void SocketState_Completed(object sender, SocketAsyncEventArgs e) { if […]

HAProxy / Websockets为什么新的套接字不断创build?

我试图用HAProxy设置Websockets,具有以下configuration:http traffic – > haproxy – > varnish – > nginx – > node ws traffic – > haproxy – > node 一个子域强制ssl,以便haproxy将任何httpstream量redirect到https。 (和ws到wss) 一切都按预期工作,除了一个问题,新的套接字不断被创build,而不是一个(我可以看到他们在Chrome的debugging控制台每隔几秒创build一次) 当我使用Varnish做Websocketspipe道时,我没有这个问题。 我怎样才能解决这个问题 ? global daemon defaults mode http frontend insecure # HTTP bind :80 timeout client 5000 # acl acl is_console hdr_end(host) -i console.mydomain.com acl is_client hdr_end(host) -i www.mydomain.com acl […]

Node.js + socket.io确定每个实例的最大客户端数量

我被要求粗略计算一个大的EC2实例(16Gb Ram,4 Core Xeon)上的单个socket.io实例句柄的数量。 我更新了简单的socket.io基准的样本。 Serever: var io = require('socket.io').listen(80); var exec = require('child_process').exec; io.configure(function() { io.set('log level', 1); var transport = process.argv.length >= 2 ? process.argv[2] : null; if (transport) { io.set('transports', [transport]); } }); var payload = "Payload: Payload line item " + "Payload: Payload line item " + "Payload: Payload line item […]

在nodeJS中获取SESSIONID

现在,在使用nodejs和socket.io几个小时之后,我遇到了更多的问题 – 一个是,我需要在node.js中获取sessionID,使用app.get('/' … – 因为这个事件似乎不会触发socket.io连接时,它只会触发.on('connection', function( … var express = require('express')() express.set('port', process.env.PORT || 8080) var server = require('http').createServer(express) var socket = require('socket.io').listen(server) server.listen(express.get('port')) // this event is fired, get('/', … isnt! server.on('connection', function(stream) { // ?? } ) 会话最初由PHP应用程序在用户login时创build。会话数据存储在数据库中,我需要访问该数据的密钥是SESSION ID。 最简单的方法是什么? 就像上面提到的,我发现了一些使用app.get('/' …例子,但是我app.get('/' …无法得到这个事件。 谢谢。