Tag: websocket

Node.js表示websocket不会广播给所有连接的客户端

我试图创build一个节点WebSocket消息和广播使用openshift 。 以下是我的代码。 var WebSocketServer = require('ws').Server; var http = require('http'); var ipaddr = opneshift_ip; var port = openshift_port; var server = http.createServer(); var wss = new WebSocketServer({server: server, path: '/connectserv'}); wss.broadcast = function(data) { for(var i in this.clients) { console.log(this.clients[i]); this.clients[i].send(data); } }; wss.on('connection', function(ws) { console.log('a client connected'); ws.on('message', function(data) { console.log('>>> ' […]

SocketCluster中间件握手与承诺

我build立一个既服务于http和ws的应用程序。 用户首先通过HTTPlogin到Laravel服务器。 这将返回一个用于允许通过WSlogin的JWT。 Ihv添加了一个MIDDLEWARE_HANDSHAKE,它获取该令牌并向Laravel Server发出请求,询问该令牌是否有效,并且该用户有权访问WS(并非每个已login的用户都可以访问WS); 客户代码: var options = { host: '127.0.0.1:3000', query: { source: 'web', token: '', } }; var socket; $.post('http://127.0.0.1:8000/authenticate', { email: 'chadd01@example.org', password: '1234' }, function(data, textStatus, xhr) { options.query.token = data.token; //ALL PERFECT UNTILL HERE // Initiate the connection to the ws server socket = socketCluster.connect(options) .on('connect', function(data) { console.log('CONNECTED', […]

nodejs – 如何编写连接到nodeJS Server的客户端并接收广播消息

我有以下nodeJS服务器似乎正常工作。 我想编写一个客户端,从服务器接收消息,并根据消息调用一些JS。 涉及的步骤是: 用户访问URL http://server.xyz.com:8080/pa nodeJS服务器接收该呼叫并向所连接的客户端广播该pa是接收到的api呼叫。 nodeJS连接到服务器的客户端调用与pa动作相关的一些JS。 我的问题是: 1. How do I make sure the server broadcasts that message like Step 2? 2. How do I write a client that performs Step 3 above. 对于客户端来说,我看到很多对socket.io的引用,但我不确定这种情况下最好的框架是什么。 server.js var http = require('http'); http.createServer(function(request, response) { request.on('error', function(err) { console.error(err); response.statusCode = 400; response.end(); }); response.on('error', function(err) { […]

微软边缘“WebSocket错误:networking错误12030”在一些不活动之后使用WebSocket

我正在Web应用程序中使用WebSockets。 在Chrome和Firefox中,这一切正常。 在Edge浏览器中,经过一段时间的不活动只是断开连接。 并在控制台上显示消息: websocket错误:networking错误12030,与服务器的连接exception终止。 连接是永久的,对应用程序来说非常重要。 以下是服务器和客户端的部分: 服务器: var options = { key: fs.readFileSync(path.join(__dirname, 'cert/server.key')), cert: fs.readFileSync(path.join(__dirname, 'cert/server.crt')) }; var server = https.createServer(options, app); wsServer = new WebSocketServer({ httpServer: server, autoAcceptConnections: false }); // Handle Socket Request wsServer.on('request', function(request) { try { // Do Stuff var connection = request.accept('echo-protocol', request.origin); // Do Stuff } catch(error) […]

序列化,存储和反序列化WS对象

我正在使用NodeJS的ws库来构build一个应用程序。 目前,我正在使用一个对象来存储用户的websocket连接的实例,并以唯一的用户ID作为密钥。 伪代码: let userWebSockets = { 'user-guid-here': WSConnection }; 这工作正常,当我需要针对特定​​的用户发送消息回我可以从userWebSockets对象抓住他们的连接,因此, let ws = userWebSockets['user-guid-here'] 。 问题是,如果我正在运行的框上集群节点进程,请使用集群模块分叉主进程,或将这些框集群化,那么不能保证相同的userWebSockets对象将在内存中,并且当我尝试根据他们的唯一标识符查找用户的连接,我冒险得到undefined作为查找的返回值。 我的第一个倾向是使用像Redis一样的远程k => v存储来处理维护字典,但是我意识到在我的实现尝试中,Redis显然不会存储Javascript对象,并且我可以用这样的技术被序列化的对象的方式,它可以稍后重组/反序列化。 我尝试从以下仓库使用Crockford的cycle.js: https : //github.com/douglascrockford/JSON-js/blob/master/cycle.js这是不成功的,因为我发现我试图带来的对象的原型方法(例如,在这种情况下, ws.send()不会被保留下来。 我目前的解决方法是使用nginx来平衡上游实例池,并使用ip_hash指令使用户ip =>实例粘滞,但我不满意这个解决scheme。 有没有人有我想在这里做什么运气? 我也打开重新devise的应用程序,如果有更好或更习惯的方式来处理用户=> WS连接关联。

socket.io – 运输closures

我们的实时聊天服务由客户端socket.io连接组成,这些连接在整个“随机”客户端断开连接,并在“传输closures”的服务器端断开连接。 当服务器不能再ping通客户端和用户分别注销时,我们偶尔会看到“ping timeout”和“namespace disonnect”。 我们正在努力理解为什么“运输closures”断开正在发生。 这里是客户端用于连接的套接字选项, var socketOptions = { transports: ['websocket'], query: 'token=' + JSON.stringify(token) + '&member=' + JSON.stringify(memberService.currentMember) + '&isBrowser=' + isBrowser + '&isBrowserFocused=' + isBrowserFocused, reconnectionAttempts: 5 } 有任何想法吗? 谢谢!

使用api的节点js websockets

我有一个节点js API与快速build立。 在我的一个http端点中,我想接受请求并通过websockets发送到另一个服务器,然后返回一个答复。 我正在使用ws库 。 问题是,websockets通信不同步,所以我不知道如何返回API客户端的答案。 无论如何,这是我所尝试的,但并不完整: const express = require('express'); const app = express(); const WebSocket = require('ws'); const uuid = require('uuid'); const bodyParser = require('body-parser'); const ws = new WebSocket('ws://localhost:7465/'); app.use(bodyParser.json({ limit: '50mb' })); app.use(bodyParser.urlencoded({ extended: false })); ws.on('open', function open() { console.log('connected'); }); ws.on('close', function close() { console.log('disconnected'); }); ws.on('message', function incoming(data) […]

nodejs websocket初始连接超时

我有一个节点客户端,试图连接到ELB后面的WebSocket服务器。 有时,初始连接挂起,不会返回,我想知道是否有在websockets / ws模块的超时选项。 我看到它使用本地的https / http节点lib,并且lib有一个setTimeout方法 – 但是没有被使用。 我修补我安装的模块使用该方法,它的工作。 有没有我不知道的另一个选项? 我应该提交公关吗? 谢谢!

Node.js / Websockets – 为服务器添加安全性 – html客户端连接

我使用node.js和ws模块创build了一个websocket服务器: var options = { port: 8080, key: fs.readFileSync('ssl/key.key'), cert: fs.readFileSync('ssl/cert.cert'), ca: fs.readFileSync('ssl/ca.pem'), requestCert: false, rejectUnauthorized: true } var processRequest = function(req, res) { console.log("Request received.") }; var server = https .createServer( options, processRequest) .listen(options.port, function(){ console.log("HTTPS server created and listening to port " + options.port); }); var wss = new WebSocket.Server ({ server: server […]

EADDRINUSE错误,用于在不同的path上打开websocket,但在nodejs中打开相同的端口

我正在创build一个基于ws websocket在nodejs中的多房间聊天应用程序。 我可以做单一的聊天室工作,但创build第二个房间时,我得到EADDRINUSE错误。 错误是因为我已经在第一个房间使用了websocket端口。 我怎样才能创build第二个房间在不同的path相同的端口。 例如: var WebSocketServer = require('ws').Server; a = new WebSocketServer({port:8080, path:'/a'}), b = new WebSocketServer({port:8080, path:'/b'}); 这给错误:错误:听EADDRINUSE 8080 谢谢,罗宾