Articles of 套接字

Socket.io客户端到客户端的逻辑,有很多用户

我试图在我的应用程序中使用socket.io和node.js和Android实现客户端到客户端的消息传递。 我search了一下,发现了很多教程,解释了在通过socket.io套接字发送消息时如何处理针对特定客户端的问题。 用socket.io和node.js发送消息给特定的客户端 解决scheme几乎总是相同的:创build一个hashmap对象,将用户信息(如username , email address (或任何可以识别的唯一标识))与其socketid 。 然后调用io.clients[sessionID].send() 现在我有两个问题: 如果只有一个app实例正在运行,这将工作,但想象如果我的应用程序分为多个实例(对于大型应用程序)。 如果连接到实例X的客户端A想要发送消息给连接到实例Z用户B ,该怎么办? 如果在示例中看到的是,直接将脚本存储在脚本中存在的简单对象中,则某些套接字将不知道其他实例中存在的其他用户。 如果我完全错了(我可能),这是一个很好的做法,将所有用户的socketids存储在一个单一的variables? 如果是的话,50000+的用户环境还是可以的吗? 如果不是,我应该find另一个解决scheme,像在数据库中存储用户的socketids ?

奇怪的cors与套接字问题

我正在使用btford.socket-io,并尝试与节点交谈。 它工作正常,但不是我从localhost:5000更改为example.org如下所示: .factory('socket',function(socketFactory){ //working var myIoSocket = io.connect('http://localhost:5000'); //not working var myIoSocket = io.connect('http://example.org:5000'); mySocket = socketFactory({ ioSocket: myIoSocket }); return mySocket; }) 我在我的控制台中得到了这个错误 XMLHttpRequest cannot load http://example.com:5000/socket.io/?EIO=3&transport=polling&t=LIGH5VO. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:8100' is therefore not allowed access. The credentials mode of […]

MongoError:套接字挂断

我正尝试连接到mongolabs(mlabs)上的mongodb数据库。 当我在本地计算机和服务器上运行代码时,我连接成功。但是当我在我的aws服务器上运行时,我得到这个错误数据库错误{ [MongoError: socket hang up] name: 'MongoError', message: 'socket hang up' } Code trial.js: var express = require('express'); var app = express(); var mongoose = require('mongoose'); var mongojs = require('mongojs'); var db = mongojs('mongodb://user:pass@ds01312192.mlab.com:133492/database', ['mohd'], { ssl : true }); db.on('error', function (err) { console.log('database error', err); }); db.on('connect', function () { console.log('database connected'); […]

pipe理多个TCP套接字nodejs

我有一个这样的数组: var exports = module.exports = {}; var net = require('net'); exports.config = [ { ip: "127.0.0.1", id: 1, socket: new net.Socket(), data: "", }, { ip: "192.168.5.242", id: 2, socket: new net.Socket(), data: "", } ]; 我试图用这个代码连接每个这个项目与TCP套接字: for(var key in tornelli.config) { tornelli.config[key].socket.connect(4000, tornelli.config[key].ip, function() { console.log('CONNECTED TO: '+tornelli.config[key].ip); }); tornelli.config[key].socket.on('data', function(data) { ……….. […]

使用Mocha.js时,node.js套接字挂起

我正在使用节点v6.2.0并通过Mocha&Chai进行testing。 我写了一个API,当我用邮递员/网站/节点CLItesting它,它的工作很好,但是当我使用摩卡来testing它,我得到一个错误,说: {[错误:连接ECONNREFUSED 127.0.0.1:4001]代码:'ECONNREFUSED',errno:'ECONNREFUSED',系统调用:'连接',地址:'127.0.0.1',端口:4001} 现在,事情是,在http://localhost:4001testing连接的先前testing工作正常… 这是testing代码 – describe('/api/getAlbums', function () { this.timeout(5000); it('should get an array of 4 objects', function (done) { http.get('http://localhost:4001/api/getAlbums?uid=some_uid', function (res) { console.log(`Got response: ${res.statusCode}`); done(); }).on('error', (e) => { console.log(`Got error: ${e.message}`); console.log('e', e); done(); }); }); }); 再次,当我在CLI中运行相同的function(没有done(); ),它工作正常。 我去了很多文件,但找不到任何东西,很想得到你的帮助,谢谢。

socket.io客户端和服务器socket.id不同

我有套接字服务器和客户端socket.id的问题。 使用node@5.6.0和socket@1.4.6我得到不同的socket.id从客户端( socket.io-client )和服务器( socket )不知道这是否预计在最新版本? 不同之处在于,服务器端socket.id具有/#IAPEFvUDQkfV0NxcAAAA而客户端socket.id具有IAPEFvUDQkfV0NxcAAAA ,就像我使用socket@1.3.1我从客户端和服务器获得相同的socket.id。 这是版本… admin$ npm list | grep socket ├─┬ socket.io@1.4.6 │ ├─┬ socket.io-adapter@0.4.0 │ │ └─┬ socket.io-parser@2.2.2 │ ├─┬ socket.io-client@1.4.6 │ └─┬ socket.io-parser@2.2.6 ├─┬ socket.io-client@1.3.1 │ ├─┬ socket.io-parser@2.2.2 ├─┬ socket.io-stream@0.6.1 admin$ npm –version 3.6.0 admin$ node –version v5.6.0 admin$ 这是服务器的test_socket_server代码 # test_socket_server.js var io = require('socket.io').listen(5000); var serverurl […]

自定义事件被发射多次,只有一次被调用

我正在使用ws模块来实现networking套接字。 名为newmessage的事件被触发,等于使用web-socket-server打开的套接字数量。 我不明白原因。 虽然在debugging中我发现这个发射只被触发一次,但事件函数被调用了两次。 var SocketServer = require("./lib/SocketServer"); // Creating the object starts the server on this.socketPort var sserver = new SocketServer(webSocketPort); // Calling activateListeners on SocketServer instance, activates // all the event listeners associated with SocketServer sserver.activateListeners(); sserver.on("newsocket",function(socket,status) { infoLogger.setMessage(`New socket opened: ${socket}`).log(); sserver.on("newmessage",function(message,status) { // BEING CALLED = NUMBER OF SOCKETS OPENED infoLogger.setMessage(`New […]

聊天/系统通讯应用程序(Nodejs + RabbitMQ)

所以我现在有一个运行NodeJS的聊天系统,通过兔子传递消息,每个连接的用户有自己的唯一队列订阅,只有听消息(只有他们)。 后端也可以使用这个聊天pipe道来传递其他系统消息,如通知/好友请求和其他用户事件驱动的信息。 目前,即使消息的有效载荷相同,比如说1000个用户,后端也必须循环发布每个消息1个用户。 我想摆脱这一点,并能够发送相同的消息给多个不同的用户,但不是每个连接的用户。 (例如:通知某些用户他们的朋友已经联机)。 我考虑实现一个兔子队列系统,在这个系统中,所有的消息被汇集到同一个队列中,而不是兔子发送所有的用户队列,节点接收这些消息,并通过套接字连接(向谁在线)发送消息给适当的用户。 build议 – 基础设施 这样后端不需要为100和1000的用户循环,并且可以发送包含这个消息应该去往的所有用户的单个有效载荷。 我打算将nodejs服务器集中在一起。 我也想知道,因为从来没有做过这样的生产环境,我需要跟踪每个socketID。 到目前为止,我已经发现了潜在的缺陷: 由于1000条消息可以堆积在一个队列中,因此速度较慢。 手动存储套接字ID以手动传送给用户。 将路由卸载到NodeJS而不是RabbitMQ 有没有人做过这样的事情? 如果是这样,你有什么build议。 使用用户唯一队列进行扩展还是比较好?或者将所有用户的所有分组消息汇集到较小(但较大的队列)的队列中。

在azure上缩放nodejs,socket.io和mongodb

我们有一个应用程序运行在一个单一的天青虚拟机上(Windows服务器R12数据中心)。 由于交通和负载的巨大,我们正在计划扩大我们的系统。 该应用程序是我们在nodeJs,socket.io和mongodb(MongoLab或MLAB)上开发的游戏。 我们的初步计划如下: 扩展操作系统:使用azure色的虚拟机规模集。 扩展数据库:鉴于我们正在使用Mlab(一个mongodb数据库即服务),我们认为缩放是由他们完成的。 对Nodejs和Socket.io的缩放效果 :我们不确定…(任何提示) 任何有这些技术经验的人都可以评论这个堆栈吗?

nodejs套接字编程 – 发送数据长度

我有一个服务器监听特定的端口,并期望命令以下方式 – 前四个字节应该包含命令的长度,其余的字节包含实际的命令。 例如: 如果我想发送的命令是{cmd:"EL",ptno:1234} ,那么我发送的前四个字节应该以big-endian符号包含数字20,因为命令长度是20,因为命令是UTF -8格式。 我发送的剩余字节将包含命令。 我想知道如何在nodejs中做到这一点。 另外,当服务器发回数据时,我需要读取前四个字节并确定数据长度,并相应地读取套接字inputstream。 请帮忙。