Articles of socket.io

在不同的文件中分割节点应用程序

我正在用Socket.IO开发我的第一个Node.js应用程序,一切正常,但现在应用程序正在慢慢变大,我想将应用程序代码分成不同的文件,以便更好的维护。 例如,我在主文件中定义了所有的mongoose模式和路由。 下面是socket.IO连接的所有function。 但现在我想为模式有一个额外的文件,一个额外的路由文件和一个function。 当然,我意识到可以编写自己的模块或加载一个带有require的文件。 这对我来说是没有意义的,因为我不能使用像app,io或db这样的variables而不把它们变成全局variables。 如果我将它们传递给模块中的函数,我不能改变它们。 我错过了什么? 我想看一个例子,如何在不使用全局variables的情况下在实践中完成

Node.JS,Socket.IO和群集中的WebSocket握手不起作用

我在使用Node.js,socket.io和node.js集群对应用程序进行集群时遇到了问题。 我使用socket.io-redis来共享所有工作人员的信息,但不工作。 我的代码: var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { … var express = require("express"); //Server var server = express(); […]

WebSocket连接失败:在WebSocket握手期间出错:意外的响应代码:400

我正在尝试将Socket.io与Angular集成在一起,并且在从客户端到服务器端进行连接时遇到困难。 我已经看过其他相关的问题,但我的问题是本地发生的,所以没有中间的Web服务器。 这是我的服务器代码的样子: const app = express(); const server = http.createServer(app); const io = require('socket.io').listen(server); io.on('connection', function(socket) { socket.emit('greet', { hello: 'Hey, Mr.Client!' }); socket.on('respond', function(data) { console.log(data); }); socket.on('disconnect', function() { console.log('Socket disconnected'); }); }); 我使用Grunt按以下顺序加载客户端JavaScript文件: dist: { src: [ public/bower_components/angular/angular.min.js, … public/bower_components/socket.io-client/dist/socket.io.min.js, public/bower_components/angular-socket-io/socket.min.js, … ] } 然后在我的控制器中: function MyController($scope) { let socket = […]

如何检查本地socket.io连接?

我的应用程序是在浏览器,它连接到socket.io服务器,它工作正常,但是,当客户端断开一段时间(睡眠例如),连接将自动closures的服务器,这是socket.io的默认行为 如何在不刷新页面的情况下重新build立客户端连接? 有没有一种状态会告诉我,客户端的连接是closures的? 所以我必要时重新连接? 我不能依靠一个事件,我想我需要知道连接是否在本地简单的方式打开或closures..好?

如何将socket.io(在nodejs中)的事件处理程序绑定到我自己的作用域?

我在我的nodejs服务器中使用“socket.io”。 有没有办法在我的类/模块(在浏览器)范围内运行注册的事件function? … init: function() { this.socket = new io.Socket('localhost:3000'); //connect to localhost presently this.socket.on('connect', this.myConnect); }, myConnect: function() { // "this.socket" and "this.f" are unknown // this.socket.send({}); // this.f(); }, f: function() { // … } …

简单的nodeJS示例不适用于socket.io

一直在努力使这个简单的例子使用socket.io工作。 我已经用Cygwin在Windows 7上开始尝试。 从此也尝试过OS X,结果相同。 当运行脚本,它显示这个… 2 May 20:57:47 – socket.io ready – accepting connections 但访问index.html页面并不显示客户端连接。 的index.html <html> <head> <script type="text/javascript" src="socket.io.js"></script> <script type="text/javascript"> var socket = new io.Socket('localhost',{'port':8090}); socket.connect(); socket.on('connect', function(){ console.log('connected'); socket.send('hi!'); }); socket.on('message', function(data){ console.log('message recived: ' + data); }); socket.on('disconnect', function(){ console.log('disconected'); }); </script> </head> <body></body> </html> server.js var http = […]

保护Socket.io

我正在使用一个基于Node.js的https服务器,使用HTTP Basic进行身份validation(数据通过SSLencryption连接发送,这很好)。 现在我想提供一个应该是的Socket.io连接 encryption和 仅限经过身份validation的用户。 问题是如何做到这一点。 我已经发现,在连接到套接字时,我需要在客户端JavaScript代码中指定{ secure: true } ,但是如何在服务器端强制套接字连接只能通过SSL运行,而且它只能工作对于经过authentication的用户? 我认为SSL是简单的部分,因为Socket.io服务器只绑定到https服务器,所以它应该只使用SSL运行,并且不应该通过(另外)运行的http服务器运行它, 对? 关于另一件事,我没有丝毫的想法确保只有当用户使用HTTP Basic成功validation后才能build立套接字连接。 有任何想法吗?

如何更新房间内所有客户端的套接字对象? (socket.io)

io.sockets.on('connection', function(socket) { socket.object = socket.id; socket.on('updateObject', function(data) { // How to update socket.object here for all clients? }); }); 怎么做?

将更新通知发送给使用socket.io的特定用户

以下是前端的代码,其中storeSelUserId包含用于发送消息的user_id – FYI – 节点版本1.1.0 // Socket Notification var socket = io('http://localhost:6868'); socket.on('connection', function (data) { socket.emit('send notification', { sent_to: storeSelUserId }); }); 以下是路由文件中的服务器代码 – var clients = {}; io.on('connection', function (socket) { socket.emit('connection', "Connection Created."); socket.on('send notification', function (sent_to) { console.log(sent_to); }); }); 在控制台sent_to显示user_id的数组。 现在成为socket.io的入门者,我坚持解决scheme,我如何发送消息到这些特定的用户ID。 我search,发现我需要推动每个用户的sockets,所以我改革它 – var users = []; io.on('connection', function (socket) […]

如何设置socket.io起源限制连接到一个url

我们有一个html网站和一个node.js服务器,它服务于该网站。 网站和服务器使用socke.io交换数据。 我们在文档中find了这个: 原点默认为 *:* 允许连接到Socket.IO服务器的原点。 我们的html.site位于http://questionexample.com/page1 。 只有本网站可能连接到我们的服务器(但每个人都可以连接到该网站)。我们如何设置起源?