Articles of 套接字

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。 请帮忙。

Socket.io – variables不在socket.on外面更新

我正在使用Socket.io和MongoDB。 当我第一次发送我的socket.emit到服务器,服务器接受参数,并返回我所需的输出。 当我到达client.js上的socket.on时,OrderID显示在控制台上。 然而,当我退出socket.on方法块时, GenOrderIDvariables变得undefined 。 我的问题是:为什么在socket.on之前创build的socket.on ,不能在外部访问。 这里是我正在使用的client.js : // Create order array var Order = []; // Create GeneratedOrderID variable var GenOrderID; // Get School ID from cookie var SchoolID = getCookie("SchID"); // Generate OrderID socket.emit('GenerateOrderID', SchoolID); socket.on('GenerateOrderID', function(GeneratedOrderID) { console.log("OrderID sent from server is: " + GeneratedOrderID); // This returns the desired […]

使用SSL over TCP通过NodeJSbuild立两个服务器之间的安全连接

我试图从一个服务器发送一个包到另一个,但我需要确保发件人是“真正的”,包不能被拦截,我怎么能做到这一点使用SSL与NodeJS或其他方式。 这就是我所做的: 服务器代码: server = tls.createServer(function(c) { console.log('server connected', c.authorized ? 'authorized' : 'unauthorized'); }); 客户代码: var tls = require('tls'); var fs = require('fs'); var options = { key : fs.readFileSync('server.key'), cert : fs.readFileSync('server.crt') }; var client = tls.connect(9838, options, function () { console.log(client.authorized ? 'Authorized' : 'Not authorized'); }); 这个错误出来了: Error: 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv handshake […]

关于Node.js中raw-socket的一些问题

我的操作系统是Windows 10版本10586,node.js是版本4.4.5。 当我使用模块原始套接字,请按照此页面中的示例https://github.com/stephenwvickers/node-raw-socket 当像这样运行代码时: var raw = require ("raw-socket"); var socket = raw.createSocket ({protocol: raw.Protocol.None}); 我有以下错误: C:\Users\KEEY\node_modules\raw-socket\index.js:47 this.wrap = new raw.SocketWrap ( ^ Error: һ ַ Ȩ ޲ ķ ʽ һ ׽ ֵij ԡ at Error (native) at new Socket (C:\Users\KEEY\node_modules\raw-socket\index.js:47:14) at Object.exports.createSocket (C:\Users\KEEY\node_modules\raw-socket\index.js:202:9) at Object.<anonymous> (C:\Users\KEEY\Desktop\node\raw-socket\demo.js:2:18) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load […]