Tag: socket.io

Express.js – 如何将套接字传递给child_process

根据这个 https://nodejs.org/api/child_process.html#child_process_example_sending_a_socket_object 您可以轻松地将套接字连接传递给subprocess,以便它可以独立处理套接字事务。 你如何实现与客户端使用io.socket.js发送套接字请求的快速提供的req.socket对象相同的事情? 你不能这样做: child.send("socket",req.socket") 因为req.socket不是net.Socket的一个实例,所以它不能通过下面的检查 if (handle instanceof net.Socket) { message.type = 'net.Socket'; } else if (handle instanceof net.Server) { message.type = 'net.Server'; } else if (handle instanceof process.binding('tcp_wrap').TCP || handle instanceof process.binding('pipe_wrap').Pipe) { message.type = 'net.Native'; } else if (handle instanceof dgram.Socket) { message.type = 'dgram.Socket'; } else if (handle instanceof process.binding('udp_wrap').UDP) […]

如何通过socket io发送一个对象数组?

我一直在通过套接字io发送对象数组遇到问题 我的服务器端代码 var addEntity = function(ent) { entityBag.push(ent); }; var entityBag = []; addEntity(new Circle({ x: Math.random() * 5000,//(i%20) * space, y: Math.random() * 5000,//Math.floor(i/20)*space, color: ['red', 'blue', 'green', 'yellow', 'purple', 'brown', 'violet'][Math.floor(Math.random()*7)], droplet: true })); socket.emit('updatePos',entityBag); 和我的客户端代码 var entityBag = []; socket.on('updatePos', function(msg) { entityBag = msg; }); 所以当我试图debugging问题时,数组中的所有对象在客户端代码中都是空的。 所以我可能猜测错误是与套接字 如果问题太微不足道,请原谅我的无知 Cirlce类 function Circle(attr) […]

socket.io和express.js共享会话

我遇到了这个解决scheme之间共享socket.io和express.js之间的会话:第二个答案(用户xpepermint)在这个职位: socket.io和expression4个会议 不幸的是我被困在了下面的代码中,因为variablesio位于config/socketio.js ,variablessession位于config/express.js : io.use(function(socket, next) { session(socket.handshake, {}, next); }); 我在哪里放置,如何适应上面的代码? 我的app.js文件如下所示: 'use strict'; import express from 'express'; import mongoose from 'mongoose'; mongoose.Promise = require('bluebird'); import config from './config/environment'; import http from 'http'; // Connect to MongoDB mongoose.connect(config.mongo.uri, config.mongo.options); mongoose.connection.on('error', function(err) { console.error('MongoDB connection error: ' + err); process.exit(-1); }); // Populate databases […]

Socket.IO – 服务器不会在SSL下向客户端发送响应

我和socket.io以及NodeJS碰到了一个很大的问题。 我尝试通过HTTPS下的Socket.IO与NodeJS服务器通信,但是当服务器向客户端发送响应的时候,它什么都不做。 我已经检查过,但这不是证书错误! 密钥和证书是有效的。 但是,没有HTTPS,它完美的工作。 这是我的代码: var express = require('express'), fs = require('fs'); var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'utf8')), options = config.options || {}; var PORT = options.port, SSL_PORT = options.ssl_port; var app = express(), server = require('http').createServer(app); io = require('socket.io').listen(server); server.listen(PORT, function() { startServer(io); }); if (options.ssl_key.length && options.ssl_cert.length) { var sslOpt = […]

由于ping超时原因,Socket io用户断开连接

我的网站与节点js和socket io服务器端一起工作。 一切工作正常,但一段时间后,我的客户端与ping超时的原因断开连接,我昨天晚上尝试添加更多的秒ping超时,但使其最糟糕的。 var io = require('socket.io')(https,{'logger': logger, 'pingTimeout ': 60000 * 3}); 有人遇到这个问题,可以告诉我的原因? 谢谢。

Node.js Socket.io – 如何将消息发送到监听器中的特定房间?

我试图发送消息给特定的房间,一旦“joinedRoom”侦听器被客户端触发,代码工作正常,如果我把我的代码放在joinRoom侦听器之外,否则它什么都不做。 码: app.get('/room/:room/user/:user', function(req, res){ var room = { username: req.params.user, roomname: req.params.room }; res.render('room', room); }); var users = {}; io.sockets.on('connection', function (socket) { socket.on('joinedRoom', function(roomData){ socket.username = roomData.username; socket.room = roomData.roomname; console.log("Roomname: " + socket.room); console.log("Username: " + socket.username); socket.join(socket.room); socket.broadcast.to(socket.room).emit('newUser', socket.username); socket.on('disconnect', function(){ socket.broadcast.emit('userLeft', socket.username); socket.leave(socket.room); console.log('Connection id: ' + socket.id); }); […]

Socket.IO – Redis:SUBSCRIBE无法处理。 连接已经closures

我有一个简单的Redis – Socket.IO聊天应用程序,当用户点击F5或尝试刷新页面时会引发以下(redis)exception: SUBSCRIBE无法处理。 连接已经closures。 当用户刷新页面,套接字重新连接,并且我的子RedisClient对象抛出这个exception。 这个事件反过来导致我的server.js也崩溃了。 当注释掉io.sockets.on连接中的所有子对象和pub对象时,套接字将重新连接而不会有任何exception,并且server.js将继续运行。 我的server.js var socket = require('socket.io'); var express = require('express'); var http = require('http'); var redis = require('redis'); var app = express(); var server = http.createServer(app); var io = socket.listen(server); var pub = redis.createClient(); var sub = redis.createClient(); app.use(express.static(__dirname)); io.sockets.on('connection', function (client) { sub.subscribe("chatbox"); sub.on("message", function (channel, message) […]

node.js和chrome浏览器之间console.log的奇数输出

我正在玩节点的crypt() ,只是想要确认Diffie-Hillman在节点('Alice')和Chrome客户端('Bob')之间共享的秘密是匹配的。 我把socket.io上的公共密钥发送给对方,并且在他们各自的控制台输出中使用base64编码正确输出,但是当我输出共享密钥时,节点的控制台显示正确,但是Chrome的控制台给了我一串数字。 有什么想法吗? 节点的代码: var Alice = crypto.getDiffieHellman(group); Alice.generateKeys('base64'); console.log("receiving Bob's public key from browser"); var BobsPublicKey = message.data; console.log(BobsPublicKey); console.log("sending Alice's public key to browser"); var AlicesPublicKey = Alice.getPublicKey('base64'); console.log(AlicesPublicKey); client.emit('message', AlicesPublicKey); // compute shared secret var AlicesSharedSecret = Alice.computeSecret(BobsPublicKey, 'base64', 'base64'); console.log("Alice's shared secret:"); console.log(AlicesSharedSecret); 节点的控制台输出(为简洁起见,缩写): receiving Bob's public key from browser […]

我如何让node.js和vagrant共享?

我使用PHP和node.js(使用socket.io库)build立了一个小聊天, 本质上,我使用node.js作为聊天服务器和PHP来处理实际的网页。 Vagrant可以select与用户共享您的HTTP服务器: https : //www.vagrantup.com/docs/share/http.html HTTP服务器在端口80上运行,node.js在端口3000上运行。 在chat.php页面上,我有这样的代码行: socket = io.connect("http://localhost:3000"); 当我执行vagrant share命令时,它提供了一个可以提供给其他人的URL,他们将能够访问该站点。 所以给定这个URL,我编辑上面提到的代码行来包含这个URL: socket = io.connect("http://ugly-elk-1232.vagrantshare.com:3000"); 然后我开始SSH进入无家可归并从那里开始节点。 但是它不起作用。 在聊天页面上,当socket.io尝试访问端口3000时,可以看到超时错误。 这是我在控制台中得到的错误(在铬): GET http://ugly-elk-1232.vagrantshare.com:3000/socket.io/?EIO=3&transport=polling&t=Lcp9sZh net::ERR_CONNECTION_TIMED_OUT (这个URL是随机的,每次运行stream浪分享的时候都会改变,但是我总是在聊天页面上更新它) 以下是我的vagrantfile中的内容: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "scotch/box" config.vm.network "private_network", ip: "192.168.33.10" config.vm.hostname = "scotchbox" config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", […]

{“code”:1,“message”:“Session ID unknown”}将用户连接到socket.io进行第一次尝试

我正在使用objective-c中的socket.io开发聊天应用程序。 我正面临着丢失离线消息的问题。 该场景是当我有几个队列中的离线消息,当客户端(iOS应用程序)连接。 最初它直接断开“会话ID未知”。 以下是使用套接字连接的代码 NSURL* url = [[NSURL alloc] initWithString:@"MYURL"]; self.socket = [[SocketIOClient alloc] initWithSocketURL:url config:@{@"log": @NO, @"reconnectAttempts" : @50, @"reconnects" : @YES, @"forcePolling": @YES}]; if (![self.socket.engine connected]) { [self.socket connectWithTimeoutAfter:20000 withHandler:^{ NSLog(@"Socket Conencted"); }]; } [self.socket off:@"disconnect"]; [self.socket off:@"error"]; [self.socket off:@"add user"]; [self.socket off:@"private message"]; [self.socket off:@"connect"]; [self.socket off:@"startChat"]; [self.socket off:@"delivered"]; [self.socket off:@"user […]