Articles of socket.io

AngularJS&Socket.IO – 从Service(发送到此处)到Controller的返回值是undefined || 承诺,asynchronous

我没有让我的代码正常工作。 我正在开发一个AngularJS应用程序,包括通过socket.io连接到后端服务器。 我正在开发一个用于将用户数据发送到服务器的login。 如果发送的数据是正确的(电子邮件和密码),服务器将用“有效”和用户数据(名称,date,出生…)作出响应。 要素是: BackendService(执行发送到服务器的工厂) AppController(调用BackendService的loginfunction的控制器) Node.js服务器(计算发送的数据是否有效,以便用户可以login) 目的是在工厂的loginfunction返回一个“login代码”告诉控制器,如果login是正确的。 不幸的是该函数返回“未定义” 。 在我的研究中,我发现这可能是因为asynchronous性和承诺。 但是,我不能将给定的信息应用于我的问题,因为大部分是关于$ http。 另外 – 如果我的代码结构需要改进,请告诉我! 这是我的代码: Node.js服务器 socket.on('logincust', function (p1, fn) { connection.query("SELECT Salt FROM Customer WHERE Email = ?", [p1.Email], function (err, data, fields) { if (err) { throw err; } if (data.length > 0) { var hash = crypto.createHash('sha256').update(p1.Password + data[0].Salt).digest('base64'); […]

具有RESTful API的Socket.io

我在Node.js创build了一个RESTful API,并且我希望在通过POST请求在数据库中创build消息后立即更新客户端应用程序。 所以我决定使用Socket.io 。 这是我的server.js代码: import http from "http"; import https from "https"; http.globalAgent.maxSockets = 1024; https.globalAgent.maxSockets = 1024; let app = require("express")(); let server = http.Server(app); let io = require('./lib/sockets').listen(server) //setup Database let Database = require("./util/Database").init() import { version } from "../config/version.json"; app.disable("x-powered-by"); import bodyParser from "body-parser"; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); import routes […]

在连接build立之前,socket.io websocket被closures

当我连接服务器时,浏览器中的控制台打印出这个信息。 我仍然能够从服务器端发出事件,并将其caching在客户端,但我无法从客户端发出它们。 服务器端: var express = require('express'); var http = require('http'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(8080); app.get("/", function(req, res) { res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); 客户端: <!doctype html> <html> <head> <meta charset="UTF-8"> […]

Socket.io需要很长时间才能连接

我正在编写一个node.js socket.io websockets应用程序(socket.io版本1.3.7),大约75%的时间客户端需要很长时间才能连接到服务器 – 另外25%的时间它几乎立即连接。 我已经在服务器和客户端上启用了debugging,并且在同一地点的两个地方挂起: 服务器日志 客户端日志(Chrome) 最终它会连接起来,我可以通过将默认的超时时间从20秒缩短到5秒来更快地连接,但是我不确定它为什么挂在第一位。 看着“Chrome浏览器”networking标签,看起来像是在尝试连接时会立即工作,或者在连接尝试的其余部分无法工作。 所以把超时时间降到5秒就意味着它会更快地尝试更多的尝试,其中一个最终会成功。 networking日志(Chrome) 在这种情况下,需要5次连接尝试(大约20秒)才能连接。 客户代码 // client.wsPath is typically http://127.0.0.1:8080/abc, where abc is the namespace to connect to. client.socket = io.connect(client.wsPath, {timeout: 5000, transports: ["websocket"]}); 服务器代码 var express = require("express"); var io = require("socket.io"); var htmlApp = express(); var htmlServer = http.Server(htmlApp); htmlServer.listen(DISPATCH_SERVER_LISTEN_PORT, function() { log.info("HTML […]

Express&Socket.io – 最佳实践

我现在正在使用Express框架,服务器端的socket.io包和NodeJS以及socket.io-client的socket.io-client进行项目工作。 这是代码示例: var app = require('express')(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); //… server.listen(80); 我想知道,如果使用http server ,作为结合socket.io和Express的结果,可能会导致一些限制,允许连接到服务器的数量。 我的网站应该坚持使用1000个连接立即。 所以,问题是: 在端口上使用http server监听连接数量是否比appvariables更多? 什么是一次socket.io连接的最大数量? 有没有什么已知的问题呢? http server的agentPool是否限制连接数量? http server的_maxListeners是否限制连接数量? 我应该使用app.listen(80)还是server.listen(80) ? 为什么? 此外,如果您在使用socket.io,Express和node.js时有任何build议/最佳实践或已知问题,我将很乐意学习:-) 非常感谢!

Passport + JWT + Socket.IO身份validation

我正在寻找在我的KOA NodeJS应用程序中使用Socket.io实现JWT身份validation的最佳方向。 我在socketio + jwt上find了一个很好的回购 ,但是作者并没有使用护照也没有使用koa。 我想我已经有了一个好的开始,但是我想知道在使用智威汤逊之后,护照是否过分了。 以下是我的代码。 Koa.js import koa from 'koa'; import router from 'koa-router'; import json from 'koa-json'; import bodyParser from 'koa-bodyparser'; import passport from './passport'; import session from './session'; import { config } from './env/env'; export class Koa { constructor(){ this.app = koa(); this.initMiddleware(); } initMiddleware(){ this.app.use(json()); this.app.use(bodyParser()); this.app.keys = config.secret; […]

推荐的方式来存储来自socket.io连接客户端的数据?

在socket.io ,我需要存储从客户端接收的所有数据,这些数据是基于x,y的点。 数据库位于另一台服务器上,因为该节点位于群集内。 我知道我将在数据库服务器上存储一个非阻塞函数,但是从连接的客户端接收到大约几百个甚至上千个点。 处理这种情况的最佳方式是什么? 编辑 我关心的不是数据库types,而是关于每个存储操作的延迟时间,因为数据库位于另一台服务器上,而socket.io(接收客户端数据的位置)位于另一台集群服务器上。

Websocket nodejs内存泄漏

我使用节点v4.2.1与socket.io(我已经testing,即使与websocket / ws得到“更好”的结果,但仍然不够)。 目前有几个打开的连接(hundreads)和内存的使用百分比是38%(我运行在AWS t2.small Ubuntu 14.04.2 LTS(GNU / Linux 3.13.0-48-generic x86_64)) 。 服务器代码很简单(仅用于testing): … declaration … io.on('connection', function(socket){ socket.send("hi"); }); 就客户端代码而言,我正在使用相应的socket.io版本。 插槽如何占用内存中的所有空间? 而且,我正在关注这个post: http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/ 我用–expose-gc标志运行服务器,但似乎不工作(每30秒我强制垃圾收集器global.gc ),任何猜测?

与Node.js,Websocket – Socket.IO和Redis进行简单聊天的多个实例

我正在尝试用Node.JS和使用Socket.IO的Websocket创build一个简单的聊天应用程序。 我通过这个德语教程启发了我自己,并为单个后端实例运行良好。 我想在后端有2个服务器实例,它们应该在彼此之间同步聊天消息,并将聊天logging存储在redis中。 当新的聊天室join时,客户端应该显示当前频道的最后10条消息。 我试图从这个stackoverflow页面应用解决scheme,但我得到一些问题。 首先我得到 连接到'ws:// localhost:8080 / socket.io /?EIO = 3&transport = websocket&sid = LEqGvY0CVk9YaSzBAAAA'的WebSocket连接失败:连接在收到握手响应之前closures 在控制台中的错误。 其次,两个客户端都在1秒内收到“有效载荷”消息。 我可能不明白如何重新同步机制的作品,我也不知道如何显示聊天logging。 这是我的代码到目前为止: var conf = require('./config.json'); var cluster = require('cluster'); var os = require('os'); if (cluster.isMaster) { // we create a HTTP server, but we do not use listen // that way, we have a socket.io […]

nodejs socketio多个域(单独的io)

我创build了2个网站,使用socketio + nodejs(+ 2开发网站)。 现在,我需要将这两个网站移到一个服务器上。 为了做到这一点,我使用了express-vhost,它适用于所有的东西,除了socket.io。 在我的应用程序中,我使用了几百次以下的函数。 socket.emit(), io.sockets.emit() , socket.broadcast.emit()等等。 当我创build网站,我第一次使用socketio,并正在学习它。 因此,我从来没有使用名称空间(还没有使用它们)。 现在,当我在vhost下运行这两个站点时,有人连接到site1,他们也连接到site2,因为他们使用相同的socket.io实例。 所以,我试图创buildsocketio的多个实例,每个域的一个,像这样 http = server.listen(80);//my vhost main app global.io_for_domain_1 = require('socket.io')(http, {'transports': ['websocket', 'polling']} ); global.io_for_domain_2 = require('socket.io')(http, {'transports': ['websocket', 'polling']} ); /*And then, in my domain app, i was hoping to simply swap out the reference for io like so …in […]