Tag: 套接字

如何在sails控制器中获取当前套接字对象或id?

我想通过sails.js(v0.12)控制器函数访问当前连接的套接字id。 sails.sockets.getId(req.socket); 显示未定义,因为这不是一个套接字请求 我的目标是成功login后,将我的用户的在线状态设置在数据库中 login: function (req, res) { Util.login(req, function(){ var socketId = sails.sockets.getId(req.socket); console.log('socketId ===', socketId); // return undefined }); }, 基本上我想访问控制器中的当前用户的套接字对象或在套接字方法on访问当前用户的会话对象 另外,我不知道如何重写我的旧sockets.onConnect处理程序 onConnect: function(session, socket) { // Proceed only if the user is logged in if (session.me) { //console.log('test',session); User.findOne({id: session.me}).exec(function(err, user) { var socketId = sails.sockets.getId(socket); user.status = 'online'; user.ip = […]

NodeJS – 响应stream

我使用Sails.js构build了一个使用NodeJS的简单API端点。 当有人访问我的API端点时,服务器开始等待数据,每当出现新数据时,他都使用套接字广播它。 每个客户应该根据他的用户input接收他自己的数据stream。 var Cap = require('cap').Cap; collect: function (req, res) { var iface = req.param("ip"); var c = new Cap(), device = Cap.findDevice(ip); c.on('data', function(myData) { sails.sockets.blast('message', {"host": myData}); }); }); 响应没有完成(我从来没有发送res.json() – 实际上发生的事情是浏览器不断加载 – 但上述function)。 2问题: 我正尝试从我的客户端(使用RxJS)订阅和取消订阅此API端点。 当我订阅时,我开始通过套接字接收数据,但我不能退订API端点(浏览器期望完成请求)。 每个客户端都应该根据请求IP参数订阅他自己的套接字空间(请参阅更新后的代码)。 目前它把这个信息传达给每个人。 如何用Sails.js创build一个类似Stream / Service的API端点,并根据他的input向每个用户发送新的数据? 我的目标是能够从每个客户端订阅/取消订阅此API端点。

Google App Engine和Socket.IO上的Mobile Chat应用程序

我正在用Node.JS的Socket.IO创build一个聊天应用程序,有几件事我需要澄清。 我在我的应用程序中实现了离线消息,这意味着当用户打开应用程序时,他将收到他在线时错过的所有消息。 这是我的做法: 1)客户端打开应用程序并订阅/join房间2)客户端向Socket.IO发送消息3)Socket.IO在某种数据库/数据存储中插入消息4)当客户端试图检索消息时从数据库/数据存储中拉出并保存在用户电话上,然后将其从数据库中删除。 这是一个正确的方法吗? 我在网上看,有人build议使用任务/消息队列,如谷歌应用引擎任务队列,但我不知道这是如何工作的。

实时networking通知服务

我一直在试图build立一个实时通知系统。 最近2天我search了很多,我相信最好和最简单的解决scheme是使用node.js和socket.io来开发它,但我不知道这些。 node.js和socket.io是一个很好的实践,使其发生? 规格 将存储在数据库中的两组用户(简单用户和pipe理员) 当一个简单的用户发布一些东西,该post将被发送到(所有)pipe理员 如果pipe理员回复post,回复将只发送给特定的用户 有什么简单的例子或教程,以开始一些东西? 如果任何人可以发表任何例子,这将是非常有帮助的我..

Node.js socket.io为单个事件返回多个值

我正在尝试使用Node,Express(^ 4.15.3)和socket.io(^ 2.0.3)构build一个简单的应用程序。 我正在构build一个简单的聊天应用程序,但是每次添加新消息时,我都会收到额外的回复。 例如,如果第一条消息是“你好”,我会返回: 你好 如果我接着添加“有人在那里?”的后续消息,我回头: 有人在吗? 有人在吗? 等等…每次我得到一个额外的回应。 这是我的代码 – 感觉这是一些非常明显的事情,我可能一直在盯着它太久… //app.js var express = require("express"); var bodyParser = require("body-parser"); var expressValidator = require('express-validator'); var session = require('express-session'); var passport = require("passport"); var app = express(); var http = require('http'); var server = http.createServer(app); var io = require('socket.io').listen(server); app.use(express.static("public")); app.set("view engine", "ejs"); server.listen(process.env.PORT […]

Node.js“ws”websocket服务器在〜30秒后随机断开客户端,错误1006

我有一个简单的websocket服务器,如下所示: const WebSocket = require('ws'); const wss = new WebSocket.Server( { server: server, path: "/ws" }); wss.on('connection', function connection(ws, req) { console.log("Connected"); ws.on('message', function incoming(message) { console.log('received: %s', message); }); ws.on('close', function close(code, reason) { console.log("Code: "+code+" | Reason: "+reason); console.log('disconnected'); }); ws.send('something'); }); 我有一个连接到它的客户端,但连接大约30秒后,websocket服务器closures连接,错误代码为“1006”。 谷歌告诉我这意味着连接exception中断。 但是,我不确定是什么原因造成的。 ws.on('error')callback也不会被触发。 我如何与客户保持无限期的连接?

socket.io路由器,分配给多个实例之一

我试图克服TCP协议可以在单个端口上打开多less个连接的限制。 所以我想到了一种方法来创build我的服务器运行在不同的端口上的多个实例,例如: 实例1(3001) server_i1.js 实例2(3002) server_i2.js 实例3(3003) server_i3.js 实例4(3004) server_i4.js 那么我可以有一个额外的文件server_route.js ,将检查每个实例上build立了多less连接,并将用户转发到较less的实例。 我尝试使用集群构build一些东西,但似乎只是在同一个端口上创build新的进程。 如何让所有用户连接到http://exmaple.com:3000 ,然后将它们转发到四个可能的端口之一[3001, 3002, 3003, 3004] ? 目前的服务器方法 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if(cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); […]

如何使用nodejs读取串口数据并使用rs232电缆将输出发送到PHP服务器?

我需要读取一个串口来获取数据使用RS232电缆,并希望将输出发送到一个PHP服务器,但我find了一种使用node.js的方式。 我search了很多,也发现了PHP的解决scheme,但它不适合我。 这个怎么做?

Node.js TCP客户端的行为与Netcat / Telnet不同

我正在发送换行符分隔的文本命令到自定义协议TCP服务器。 在下面的例子中,我发出2个命令,并收到写回的回复。 它在telnet和netcat中按预期工作: $ nc localhost 1234 command1 command2 theresponse 与Node.js连接时,相同的工作stream程不起作用: var net = require('net'); var client = net.connect(1234, 'localhost'); client.on('data', function(data) { console.log('data:', data.toString()); }); client.on('error', function(err) { console.log('error:', err.message); }); client.write('command1\n'); client.write('command2\n'); 我希望在运行这个程序后,我会看到写入到控制台的“data:theresponse”,但是没有任何东西会被打印出来。 我也尝试执行“连接”callback里面的写入,但我有相同的结果。 奇怪的是,当我在Node REPL中尝试这个function时,它可以工作: $ node > var net = require('net') undefined > var client = net.connect(1234, 'localhost') undefined > client.on('data', […]

如何devise使用Node.js进行游戏配对

我使用node.js进行游戏配对(例如,多个客户端连接服务器,如果有多个玩家连接,或者连续踢30秒)。 目前,我使用套接字连接(这可以检测到意外丢失的连接)。 但我无法弄清楚配对的优雅方式: var net = require('net'); var _clients = new Array(); net.createServer(function(_socket) { _socket.on('data', function(_data) { //Parse client data _clients.push(_socket); setTimeout(function(){ _socket.write('kicked\n'); },30*1000); _socket.on('close', function(data) { //Delete _socket from _clients } }).listen(6969, '127.0.0.1'); setInterval(function(){ var pair = new Array(); while(_clients.length>2) { var _s1 = _clients.pop(), _s2 = _clients.pop(); // Pair _s1 & _s2 } […]