Tag: websocket

Web Socket:无法检测到互联网断开连接的客户端连接

如果客户端使用Web套接字closures互联网,我想检测客户端连接。 我的代码是: //Include util library var util = require('util'); // Include underscore library var _ = require('underscore')._; //For websocket var webSocketServer = new (require('ws')).Server({port: (process.env.PORT || 5000)}), webSockets = {} // userID: webSocket // CONNECT /:userID // wscat -c ws://localhost:5000/1 webSocketServer.on('connection', function (webSocket) { var userID = webSocket.upgradeReq.url.substr(1); //console.log('User_id is ',userID); webSockets[userID] = webSocket util.log('User_id: […]

Package express-ws不允许客户连接

我有一个express-ws npm包定义的快速路由器。 路由器的外观如下所示: //ws.js var express = require('express'); var router = express.Router(); var connections = {}; router.ws('/connect/', function (ws, req) { // console.log(ws); ws.on('close', function(x, y, z) { console.log(a, b, c); }); }); module.exports = router; 快速应用中的(不是全部)语句是(并按顺序): //app.js var app = express(); var expressWs = require('express-ws')(app); var index = require('./routes/index'); var ws = require('./routes/ws'); … […]

socket.io websocket回退

我想使用dotcloud与node.js + socket.io实时应用程序。 但是他们不支持websocket。 纯粹依靠回退会带来明显的带宽或性能下降吗? 使用我自己的服务器值得吗? Linode或aws或什么的。 谢谢。

Microsoft SQL数据库的WebSocket侦听器

我目前正在使用WebSocket作为向客户传输数据的一个项目。 基础设施看起来像这样。 客户端 – > Web服务器 – > Microsoft SQL数据库 我认为最理想的情况是这样的:客户端打开服务器的套接字。 服务器打开一个套接字到Microsoft SQL数据库。 无论何时更新数据库(某些数据已被插入),数据库将数据写入套接字。 服务器将数据写回客户端。 这可能有点乏味,也许我可以以某种方式直接从客户端打开一个套接字到数据库? 我想知道是否有办法自动通知套接字的Web服务器,如果MSSQL数据库更新,以便它可以处理该信息。 主要的问题是, 我将如何做这项工作? 我已经看过一些使用WebSockets的项目,比如Node.JS和Socket.IO,也是Tornado。 虽然我还没有find任何线索,在哪里寻找这个特定的function。 我发现一些相当不稳定的用于NodeJS的MSSQL数据库的驱动程序,但是不明白是否有任何方法可以将数据库创build到数据库,并在数据库被泵入数据库时​​立即通过套接字发送数据。 我也意识到,在客户端和数据库之间build立一个套接字是不明智的,因为现在这不是一个问题,SQL不是实时应用程序的方式,但我必须目前 :) 编辑1: 感谢@tomfanning我现在知道这个问题的解决scheme,但严重怀疑性能的改善。 让我为你描绘一下情况。 在我使用MSSQL数据库上的触发器的情况下,我想象会发生这种情况。 情况1 数据库被更新 触发器被拉 CLR脚本连接到Web服务器。 无论是通过一个套接字,它必须打开和closures每个触发器或通过HTTP(S)请求,涉及打开和closures标题(这是无用的开销) Web服务器接收触发器并将数据发送到客户端。 客户端更新。 现在想象一下相同的场景,但是随后使用AJAX 情况2: 客户端为AJAX请求设置1000ms超时 客户端超时并发出AJAX请求 数据库执行一些查询并回传结果 客户端更新。 在情况1中,你需要一个请求和一个套接字发送/接收,情况2你只需要一个请求。 如果我将AJAX请求的超时设置为10MS,那么对用户来说就好像它是一个像websocket一样的实时应用程序? 还是情况1仍然更有效率,我只是夸大? 提前致谢!

在浏览器导航到新页面之前,Socket.io接收消息

我在使用Socket.io接收消息时,遇到了页面导航之前的问题 – 通常是消息是由导航触发的某些服务器端操作的直接结果。 我现在看到的是这样的: Socket.io连接 用户触发页面导航(提交表单,刷新等) 服务器端逻辑向socket.io服务器发送请求,该服务器立即将事件分派给仍然连接的客户端 客户端收到并确认请求(我很确定有一些内置到socket.io的消息确认,纠正我,如果我错了),并会显示通知给用户,但然后… socket.io连接在原始页面上closures 新页面加载并显示 Socket.io打开一个新的连接,但没有新的消息,因为最后一个被接收和确认。 这实际上并不是一个错误,因为我不认为期望Socket.io在发生导航之前closures连接是不合理的。 但是,我不确定处理这个问题的最好方法是什么。 目前,我保持每个客户端一次打开一个连接,并在新连接时closures另一个连接。 这种情况在这种情况下不会发生,因为第一个在第二个连接之前已经closures了。 我也可以保留所有客户端的列表,但这也不能解决这个问题,因为消息仍然会被第一个连接接收。 有人可以build议解决这个问题,以确保用户总是看到通知消息?

如何从本地主机断开?

是否有可能从本地主机断开连接? 我正在写一个Node.js WebSocket服务器,我想在本地testing如果连接错误地closures会发生什么。 如果我正在远程testing,则只需closuresWi-Fi,但不会断开与本地主机的连接。 思考?

数据包大小为低延迟websocket html 5游戏

我正在做一个HTML 5的国际象棋游戏。 我用一个长度(大小)为64的无符号8位二进制数组来代表该板。由于棋盘上有64个位置。 var board = Uint8Array(64); 每个棋子通过(明显)8位无符号整数表示在棋盘上。 然后在客户端上有一张地图将一个片断的二进制表示与一个文本string相关联,例如: var pieceMap = { 01: 'BlackKnight', 112: 'WhitePawn', 6: 'BlackRook' … } 数据通过socket.io连接发送(让我们假设我们正在使用websockets),TCP我认为? 所以问题是: 请问TCP发送的数据包与我给它的数据一样小(有TCP开销),还是TCP有一个最小数据包大小,并发送200byte数据包作为一个1024byte数据包? 为什么这么痴迷大小? 我知道这并不重要,但我使用这个为学习experiance,在未来的比赛中,我会用这个来降低延迟…我知道国际象棋并不需要低延迟。

从python发送套接字到Meteor(node.js)

我想发送一个套接字与数据(只是一个整数,如“23”)从Python到一个Web应用程序,它是使用Meteor编写的,它是一个构build在node.js和其他库之上的Web框架。 在python方面,我有以下代码: import serial, socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("localhost", 3000)) s.send ('something') meteor方面我需要做些什么? 这个Python代码是否正确? 这是不同于websockets?

NodeJS + MySQL + Socket.IO:更新数据库

我目前正在寻找一个关于NodeJS和MySQL数据库推送通知的解决scheme。 我想结合NodeJS和Socket.IO来提供推送通知,但问题是,我不知道如何问我的服务器来检查是否有从我的数据库更新。 我已经有了一个完美的“轮询”方法,但它有点混乱,这在服务器调用和响应方面并没有真正的优化。 所以这个想法是,当用户A在我的数据库中插入一些东西时,所有跟随他的客户端都会被push(推送,而不是轮询)通知。 这是我现在为我的server.js: var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'), mysql = require('mysql'), connectionsArray = [], connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'root', database : 'nodejs' }), POLLING_INTERVAL = 5000, pollingTimer; connection.connect(function(err) { console.log( err ); }); app.listen(1337); function handler ( req, res ) { […]

无法创build与Node.js socket.io服务器的跨域websocket连接

根据我的search,这不应该那么辛苦,到目前为止我已经尝试了许多没有运气的东西。 我有一个在Heroku上运行的Node.js服务器,它创build了一个socket.io服务器(我也曾尝试在Nodejitsu上托pipe它,但没有帮助)。 socket.io套接字连接没有问题,如果我从实际的Node.js服务器,我想创build一个websocket连接的服务页面,但我不能使任何我的跨域套接字连接尝试工作。 我试图做一个跨域连接到这个socket.io服务器几种方式: (1)一个简单的本地HTML文件,其中包含一些脚本,用于从节点服务器(使用$ .getScript)成功获取客户端socket.io库,然后尝试创build套接字连接(var socket = io.connect('nodejs_server_hostname:port_num ');),失败。 (2)在本地运行Rails应用程序服务器(开发模式),为包含JavaScript的客户端提供响应,尝试以与方法(1)相同的方式形成websocket连接,并且失败 (3)在Heroku中托piperails应用程序,并执行与方法(2)相同的操作。 这也失败了。 我确保按照Heroku文档( https://devcenter.heroku.com/articles/heroku-labs-websockets )中的说明启用websockets。 如果请求是从客户端尝试与之build立socket.io连接的实际的Node.js服务器提供的,那么一切都可以正常工作。 所有三次尝试都会触发socket.socket.on('error')事件。 我已经尝试使用以下代码修改rails应用程序中的http响应头文件: response.headers['Access-Control-Allow-Origin'] = '*' 这正确地设置标题(我从轨道服务器请求页面后检查),但它不修复套接字连接问题。 我在执行日志logging的Node.js服务器上创build了一个socket-io授权callback函数,看起来这个callback函数根本就没有碰到跨域套接字连接尝试。 所以看起来Node.js服务器甚至从来没有看到websocket连接尝试,这对我来说是相当混乱的。 下面我将粘贴所有相关的代码文件。 Node.js服务器文件: var http = require('http'), express = require('express'), whiskers = require('whiskers'), redis = require('redis'), port = process.env.PORT || 5000, app = express(), server = http.createServer(app).listen(port), io = require('socket.io').listen(server); console.log('—- […]