Tag: 套接字

ELB上的套接字io需要连接到应用程序服务器的所有实例

我有一个套接字服务器应用程序写在节点js上,托pipe在Amazon EBS(Elastic bean stalk)上,由负载平衡器 客户端连接到套接字并传递指定的ID,说event_id我的应用程序创build名称为“event_ event_id ”的房间,并join房间。 不同的客户有不同的“event_id” 一个lambda函数连接到套接字,并向应用程序发出一个名为“event_push”的事件,其中包含必要的数据,如event_id 每当我的套接字应用程序(在EBS中的一个实例中)检测到带有event_id的推送事件时,它就将推送的event_id广播给房间的所有成员“event_ event_id ”,从而所有成员得到事件的通知 客户端可以连接任何由负载均衡器决定的服务器,而粘性会话可以保持连接 现在我的问题:有没有办法发出“event_push”只有服务器有一个房间名为“event_ event_id ” Qn:有没有办法将事件发送到EBS中的所有服务器实例? 或Qn:有没有其他解决scheme?

节点Http代理Web套接字平衡

我需要能够在应用程序级别上平衡WebSocket。 让我们说,前面的websocket请求基于我收到的消息,解码它的代理,然后使用该数据发送到另一个套接字服务器使用一些逻辑。 但我无法做到这一点。 这是我写的最初的代码,并试图做到这一点。 这是服务器 var http = require('http'); var httpProxy = require('http-proxy'); var WebSocket = require('ws'); var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { ws.on('message', function incoming(message) { console.log('received: %s', message); }); ws.send('something'); }); var proxy = httpProxy.createServer({target: 'ws://localhost:8080', ws:true}); var server = httpProxy.createServer(function(req, res) { […]

如何login后连接到套接字 – 智威汤逊

我正在使用socketio-jwt来validation套接字。 在服务器上: socketio.use(require('socketio-jwt').authorize({ secret: config.secrets.session, handshake: true })); 在客户端: var ioSocket = io('', { query: 'token=' + Auth.getToken(), path: '/socket.io-client' }); 我的问题是,如果一个客户端连接到服务器,authentication失败,并没有build立与套接字的连接。 现在,如果用户login到系统中,与套接字的连接仍未build立。 我试图实现的是,如果用户login到系统,连接就build立起来了。 我到目前为止唯一的想法是重新加载页面,像$window.location.href = '/'; login后。 但似乎不是正确的方法。 另一个select是保持套接字试图(重新)连接超时。 但它是一个不好的select,因为我的应用程序允许用户没有login。 如何正确触发套接字连接?

node.js套接字exception读取ETIMEDOUT – 如何正确捕获它? 怎么写超时?

我有一个代理服务器,pipe理一堆客户端,并与另一个http服务器通话。 消息被来回发送并导向给客户。 客户端可以做超时,服务器有一个心跳function(每n秒重复一次),发送心跳到clientId映射到套接字连接的所有客户端。 当心跳尝试与不再连接的客户端进行通信,但其套接字仍处于活动状态时,会收到“读取ETIMEDOUT”exception。 我试着暂时将套接字连接的超时设置为2000ms,理论上我的套接字事件处理程序会超时(事件处理程序在tcp服务器部分),但是这并没有发生。 它需要几次心跳死亡。 部分问题肯定是我对如何构造node.js代码缺乏了解,所以如果您有任何build议,我会非常感激他们。 另一个问题是,是否可以单独处理读写超时,或者至less将其分开。 我真正想做的是让我的心跳function成为tcp服务器的一部分,只发送一个心跳(如果在n秒内没有听到客户端的声音),只发送一次心跳。 如果我们超时,那么我们杀死socket,否则我们再等一等。 谢谢! >>$ node –harmony-weakmaps server.js Heartbeat: Sat Feb 18 2012 08:34:40 GMT+0000 (UTC) { sending keep_alive to id:00:00:00:00:00:10 socket:[object Object] } socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"} Heartbeat: Sat Feb 18 2012 08:35:40 GMT+0000 (UTC) { sending keep_alive to id:00:00:00:00:00:10 socket:[object Object] } socket:received data: {"id":"00:00:00:00:00:10","m":"keep_alive","success":"true"} node.js:201 throw […]

Node.js中的“pipe道中未处理的stream错误”

我的应用程序:Node.js,Express,一些中间件,包括connect-assets和express.static。 所有运行在本地机器(OSX,节点0.8)在开发模式(因此express.static)。 可能很重要的细节:我最近通过HTTPS(必要时通过HTTPredirect)使整个应用程序工作,并在开发过程中使用自签证书(当然,在我的浏览器中启用)。 现在,应用程序往往是失败的机智堆栈跟踪: (1) stream.js:81 throw er; // Unhandled stream error in pipe. ^ Error: write EPIPE at errnoException (net.js:769:11) at Object.afterWrite (net.js:593:19) (2) stream.js:81 throw er; // Unhandled stream error in pipe. ^ Error: socket hang up at SecurePair.error (tls.js:948:15) at EncryptedStream.CryptoStream._done (tls.js:432:17) at EncryptedStream.CryptoStream._pull (tls.js:577:12) at SecurePair.cycle (tls.js:866:20) at EncryptedStream.CryptoStream.end (tls.js:405:13) at […]

在多个端口上运行node.js http服务器

请任何人都可以帮助我find如何获得node.js中的服务器套接字上下文,以便我知道请求来自我的服务器上的哪个端口号。 我可以读取服务器端口,如果我请求使用http标头,但我想通过networking和类似的套接字上下文告诉请求来自哪个端口号。 这里是示例代码: var http=require('http'); var url = require('url'); var ports = [7006, 7007, 7008, 7009]; var servers = []; var s; function reqHandler(req, res) { var serPort=req.headers.host.split(":"); console.log("PORT:"+serPort[1]);//here i get it using http header. } ports.forEach(function(port) { s = http.createServer(reqHandler); s.listen(port); servers.push(s); });

在Web服务器上安装节点js

我使用node.js和socket.io创build了一个简单的聊天应用程序,它在localhost:3000中工作 但是,我想把它放在我自己的网站上。 我不知道如何在web服务器上安装node.js包。 我有Mac。 你有什么想法,怎么做?

nodejs-socket.io服务器为所有用户推送相同的数据

我做的socket.io实现是错误的。 我想实现一个MySQL数据的长轮询。 对于这个演示,我为每个连接到我创build的长轮询服务器的用户提取用户数据。 每个用户都会将其唯一的user_id传递给服务器,以获取与他/她有关的数据。 (在真实的应用程序中,我想获取用户通知) 用户连接到服务器,服务器也从数据库长时间轮询。 但问题是,即使我从客户端传递唯一的ID,相同的数据被推回到客户端。 用户1传递了ID 5,用户2传递了ID 3.这两个用户都获得了与响应相同的数据(用户1的数据) 这是客户端代码 : var user_id = 5; //hardcoded for now, but in real its fetched from a form var params = { userId: user_id, }; // create a new websocket var socket = io.connect('http://localhost:8000', { query: params }); // on message received we print all the […]

在断开事件中重新连接套接字

我试图重新连接套接字之后断开连接事件被触发相同的socket.id这里是我的套接字configuration var http = require('http').Server(app); var io = require('socket.io')(http); var connect_clients = [] //here would be the list of socket.id of connected users http.listen(3000, function () { console.log('listening on *:3000'); }); 所以在断开连接事件,我想重新连接断开连接的用户与相同的socket.id,如果可能的话 socket.on('disconnect',function(){ var disconnect_id = socket.id; //i want reconnect the users here });

PHP发送消息给Node / Socket.IO服务器

我不太确定我是否以正确的方式去解决这个问题。 我想坚持使用我的Socket.IO服务器,不想在节点内创build单独的HTTP服务器。 有了这个,我可以创build一个PHP客户端,可以直接向节点Socket.IO服务器发送数据(例如:玩家从网上商店购买物品)吗? 我已经开始: <?php class communicator { public function connect($address, $port){ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if($socket){ try { socket_connect($socket, $address, $port); } catch(Exception $e){ throw new Exception($e->getMessage()); } }else{ throw new Exception('Could not create socket.'); } } ?> 套接字似乎连接到节点服务器,但我怎样才能开始直接从PHP客户端接收数据? 例如:说我使用socket_write发送消息到服务器。 我如何通过Socket.IO获取? 希望我的问题是有道理的!