Articles of socket.io

使用redisbuild立与socket.io和NodeJs的实时聊天

我想为我的项目构build一个实时聊天系统,但实际上我有一些Redis问题,因为我希望我的数据尽可能地保存。 我的问题: 我想使用Socket Io在一个封闭的组(两个人)中进行实时聊天,但是如何存储消息? Redis是一个关键的价值商店,这意味着如果我想存储的东西,我需要添加一个唯一的关键,我的数据才能被存储。 如果同一个用户发布多个消息,我将在redis中使用哪些密钥? 我正在考虑独特的ID作为唯一的密钥,但因为我想能够获取这个评论,当用户login聊天页面,但如果我这样做,我需要写另一个数据库聊天ID与发布的用户信息 我忘了什么吗? 有没有最好的方法来做到这一点? 对不起,我的英语不好。

带有SSL的node.js和socket.io

我有一个完全正常工作的通配符SSL服务器,但socket.io给我错误: 无法加载资源:net :: ERR_CONNECTION_CLOSED 在客户端im连接到这样的sockets: var socket = io.connect('http://pricer.somedomain.com',{secure: true, port:5005}); 服务器端: var io = require('socket.io').listen(5005); 我究竟做错了什么?

如何在套接字事件中呈现新的玉视图?

我有两个主要的js文件,一个在server.js服务器端,另一个在客户端,即enterchat.js 。 这两个文件是通过socket.io进行通信的文件。 所有套接字事件都按预期工作。 server.js var express = require('express'), … server = require('http').createServer(app), io = require('socket.io').listen(server); var usernames = [], username_sockets = []; … app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use('/', express.static(__dirname+'/public/')); app.get('/chat', function (req, res) { res.render('checkUsername', {title:'Socket IO Chat'}); }); app.get('/chatwindow', function (req, res) { res.render('chatwindow', {title:'Welcome to chat window'}); }); io.sockets.on('connection', function […]

AngularJS不会使用socket.io刷新视图

我有一个node.js服务器应用程序与以下设置: var express = require('express'); var io = require('socket.io'); var http = require('http'); var app = express(); app.use(express.static('public')); var server = http.createServer(app); io = io.listen(server); io.on('connection', function(socket){ console.log('a user is connected'); }); device.on('disconnect', function() { console.log('we got disconnected! 🙁 '); io.emit('deviceDisconnection'); }); 这里的设备是蓝牙连接的设备。 而且,在客户端,我有一个AngularJS应用程序,在应用程序的控制器中声明以下事件订阅: var appFront = angular.module(appFront , []) .controller('mainController', ['$scope', '$http', function($scope,$http) { […]

socket.io – 发送到socketid(单个客户端)不起作用

我正在使用0.9.4版本(根据您的指导,我可以使用任何版本) 在服务器(app.js)中,我存储的套接字标识是这样的: var socket_ids = []; io.sockets.on('connection', function(socket) { socket_ids.push(socket.id); #This is how I am getting socket id. My real code logic is totally different, but getting socket id using socket.id; socket.on('createNote', function(data) { socket.broadcast.to(socket_ids[0]).emit('onNoteCreated', data); }); }); 总之,我有4人开了会议,所有4人是不同的用户。 当p1发送消息时,只能到达p2。 当p3发送消息时,只能到达p4。 保持if..else逻辑放在一边(我很好),当我广播使用套接字id的消息时,与该套接字id的客户端/浏览器不接收该消息。 另外,上面的广播代码行(其他行是SO的自定义)没有给出错误,但客户端没有收到。 但是,这些客户端/浏览器在广播时接收消息。 谢谢。

socket.io JavaScript客户端重新启动服务器后无法重新连接

我使用“socket.io”:“1.4.5”,“socket.io-redis”:“1.0.0”。 使用socket-io-client的javascript客户端似乎很高兴地连接到服务器,除了服务器重新启动时。 连接尝试失败,触发'{“消息”:“xhr轮询错误”,“types”:“TransportError”,“描述”:0“}'消息”connect_error“事件如果我重新启动浏览器连接工作正常。我也注意到,如果我在事件处理程序中为“connect_error”设置了一个断点并等待几秒钟,那么连接尝试最终会成功。我错过了客户端代码中的一个configuration设置? var socketConnectParams = {'max reconnection attempts': 150}; socketConnectParams['reconnection'] = true; socketConnectParams['reconnectionDelay'] = 5000; socketConnectParams['reconnectionDelayMax'] = 15000; var socket = io('http://localhost:8888', socketConnectParams); socket.on('connect', function () { }); socket.on('connect_error', function(error) { dLog("connection error event received." + JSON.stringify(error)); });

redis-server脱机崩溃节点

我在这里有一段时间。 我已经阅读了大量的文档和其他民族关于同一主题的问题,无法find如何阻止这种情况发生的答案。 我有意closuresredis服务器,以确保应用程序在生产中不会完全走向核心,但是我所做的任何事似乎都阻止了这种情况的发生。 这里是我的代码现在是一个非常简单的例子… var cluster = require('cluster'); var express = require('express'); var http = require('http'); var redis = require('redis'); var redisAdapter = require('socket.io-redis'); var sticky = require('sticky-session'); var port = process.env.PORT || 3333; var workers = 3; var app = express(); var server = http.createServer(app); var io = require('socket.io')(server); if(!sticky.listen(server, 3333, {workers: workers})) { […]

使用Socket IO在Node JS进程完成时发出消息

如何使用Socket IO和Express + Nodejs,以便在用户login时,我在MEAN栈应用程序的后台运行MongoDb更新查询。 我必须通知用户MongoDb进程已经以非阻塞的方式完成。 我不想使用callback,因为我必须将用户redirect到login页面,而无需等待此查询完成。 所以,如果这个MongoDb进程在用户login后的30秒之后完成,我想要刷新一条消息,说明已经完成了查询更新。 我已经设置套接字IO,但我不知道如何使用它,我的特殊情况。 Express +节点代码 io.on('connection', function(client) { console.log('Client connected…'); client.on('complete', function(data) { client.emit('messages', 'Hello from server'); }); }); 以下是我的AngularJs代码。 var socket = io.connect('/socketTest'); socket.on('connect', function(data) { socket.emit('complete', 'Mongo Process Done'); }); 这些是我从网站上复制的例子,我真的不明白需要做什么才能在客户端捕获这个事件。

使用nodejs / socket.io和wscat获取“套接字挂起”

我有以下nodejsnetworking套接字服务器 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(8000); 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); }); }); console.log("Listening on 8000"); 当试图连接使用wscat wscat -c ws://localhost:8000/ 我得到以下错误 error: Error: socket hang up 它使用以下JavaScript在浏览器中工作得很好 […]

NodeJS函数被socketio事件中断

我在看似并发的nodejs游戏服务器中看到了一些奇怪的行为。 这很奇怪,因为Nodejs应该在一个线程中运行,因为它不使用任何并发。 问题是我有一个使用setImmediate()重复调用的更新函数。 在这个函数中,我在两个地方使用了一个数组。 但是,当“disconnect”事件触发时(也就是客户端与服务器断开连接时),同样的数组也会被修改。 所以恰巧在时序alignment的情况下,断开事件在更新函数中访问数组的第一个位置触发,但在第二个位置之前触发,数组被修改,所以服务器在尝试数组时尝试被访问在第二位。 下面是一些可能使这张图片清晰的代码: function update(){ for(var i = 0; i < gameWorlds.length; i++){ gameWorlds[i].update(); console.log("GAMEWORLDS LENGTH BEFORE: " + gameWorlds.length); NetworkManager.sendToClient(gameWorlds[i].id, "gameupdate", gameWorlds[i].getState()); console.log("GAMEWORLDS LENGTH AFTER: " + gameWorlds.length); gameWorlds[i].clearGameState(); } } setImmediate(update); //in the NetworkManager module, the disconnect event handler: socket.on("disconnect", function(){ for(var a = 0; a < sockets.length; a++){ […]