Articles of websocket

使用nodejs + socket.io的websocket服务器不能通过testing站点连接,而ws可以

我想创build一个websocket服务器。 我听说socket.io是一个不错的select。 我用nodejs(v4.4.7)(npm install –save socket.io)尝试socket.io,使用它的示例服务器端代码 。 有一点困惑,为什么客户端代码使用“http://”而不是“ws://”协议,但是在我设置了一个真正的服务器进行testing之后,我发现“http //”和“ws //”将使用官方代码工作。 一切都很好,直到现在。 但很快我发现我不能使用第三方在线testing站点build立连接,如: 1. www.websocket.org/echo.html 2. www.blue-zero.com/WebSocket 连接似乎从来没有build立或closures尽快连接, 在Firefox控制台中,我发现“Firefox无法在ws:// mytestserver:8888 /?encoding = text中build立与服务器的连接” 或“WebSocket连接到'ws:// mytestserver:8888'失败:连接在收到握手响应之前closures”。 最后我把socket.io改成了ws(npm install –save ws)。 使用来自github.com/websockets/ws的示例代码。 所有testing站点运行良好。 (当然,我的最终目的不是让一个testing者站点工作,事实上,基于集成在我的芯片中的nopoll的websocket lib与testing者站点具有完全相同的行为。) 有谁知道为什么socket.io不能与第三方客户端同时工作吗? 非常感谢。

使用SSDP显示networking中的所有设备

我经常使用这个问题,但对于我究竟是做什么是可能的,我还是有点困惑。 基本上,我试图添加一个下拉菜单到我的Web应用程序,其中列出了连接到networking的所有设备。 当我说设备时,我不是在谈论所有的设备; 我正在谈论某些我正在使用SSDP的硬件设备。 我已经创build了发送M-SEARCH的Node.js程序,并成功find所有的设备,但我明白,Node.js不是一个浏览器的JavaScript,并且我不能显示在一个terminal上的节点调用的输出浏览器(请纠正我,如果我错了)。 在做了一些更深入的研究之后,我意识到在浏览器上做这种types的替代方法是创build某种能够执行SSDP并发送Msearch的Chrome扩展,或者使用websocket打开websocket API(不要认为这对我的SSDP特别有用,但我可能是错的)。 鉴于我想要做的是,这些替代scheme是否有帮助。 我试图做甚至可能吗? 我再一次在这个话题上做了研究,但是我还没有find明确的答案。 如果可能的话,我真的很感谢链接教程或只是一般想法如何完成我想要做的事情。 我知道我最近在StackOverflow上发布了一些关于这个的东西,没有得到答案或答复,但是我对这个话题做了更多的研究,觉得我有更好的理解。 话虽如此,我仍然感谢如何解决这个问题的一些方向,因为我没有在网上find任何有用的东西。 感谢您的时间!

Node.js缓冲区与types化数组 – 性能

要发送带有WebSocket的二进制消息,我可以使用Node.js缓冲区或Typed Arrays 。 他们之间在performance方面是否有显着差异?

socket.io中的socketvariables是什么

我是Node.js和socket.io的新手。 我去官方网站的socket.io,并尝试一个教程。 http://socket.io/get-started/chat/ 它在我的电脑上正常工作。 但是我根本无法理解它的代码的本质。 问题:什么是下面的代码中的“套接字variables”。 它从哪里来? io.on('connection', function(socket){ socket.on('chat message', function(msg){ io.emit('chat message', msg); }); }); 也许“msgvariables”是stringtypesvariables。 而从客户方面来说,对吗?

使用Web套接字从数据库到客户端的实时数据更新/更改

我正在尝试使用Web套接字构build一个实时应用程序。 目前我正在使用ajax从客户端拉(每个固定的时间间隔)来获取数据库表的新变化。 我并不完全了解如何使应用程序实时。 当前实施: 在我的应用程序中,我通过从数据库(MariaDB)的ajax轮询获取数据,并在客户端的表中显示它。 预期的行为: 从客户端没有轮询,每当数据库端发生变化,它应该在所有连接的客户端更新。 在我的search过程中,我遇到了一些解决scheme: Node.js + server.io + oracle数据库 RethinkDB 服务器发送事件 连续查询通知 请帮助我find更好的解决scheme。

React Native与WebSocket不起作用

我听说Socket.io在React Native中没有正常工作,所以我决定使用普通的WebSocket。 我使用node.js来实现WebSocket服务器,并不难。 通过浏览器,我尝试了所有的工作,但与React本地,没有成功。 这些是我试图实现websocket服务器: expression-WS WS 快递只是没有任何错误消息工作。 只是它说没有连接的东西。 所以我把模块改成了ws,这个模块应该是客户端和服务器都需要的,所以我做了。 服务器工作,但是当在AVD上的android应用程序,它说: 需要未知的模块“url”。如果您确定该模块在那里,请尝试重新启动打包程序或运行“npm install”。 所以我完全删除了node_modules目录并重新安装它们,但同样的错误再次出现。 我正在使用节点v6.2.2,并且反应native-cli 1.0.0,react-native 0.33.0。 这是带有ws模块的服务器代码(与ws模块自述文件相同): var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 3000 }); wss.on('connection', (socket) => { socket.on('message', (msg) => { console.log('Received: ' + msg); }); socket.send('something'); }); 这是客户端: import React, { Component } from 'react'; import { […]

套接字IO:RangeError:超出最大调用堆栈大小

每次客户端连接到我的nodejs服务器,我的服务器崩溃的错误“RangeError:最大调用堆栈大小超过”。 我相信我必须在某个地方有一个recursion的问题,但是它正在逃避我。 我的服务器: require('monitor').start(); var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); var allClients = []; io.on('connection', function(socket){ console.log('user joined: ' + socket.request.connection.remoteAddress + ':' + socket.request.connection.remotePort); socket.address = socket.request.connection.remoteAddress; socket.port = socket.request.connection.remotePort; socket.name = ''; socket.xPos = 0; socket.yPos = 0; //io.emit('new user', […]

通过套接字从c#发送数据到节点的socket.io服务器

我目前正在尝试用我的C#客户端提供的数据来提供socket.io服务器。 但是我不确定如何在服务器上接收消息。 我的服务器代码: const io = require('socket.io')(9000); io.on('connection', (socket) => { console.log('Connected'); } 首先,我不知道我要听哪个事件,但是我无法使用以下客户端(使用Websocket-sharp)将数据发送到我的服务器: private void init() { // start socket connection using (var ws = new WebSocket("ws://localhost:9000/socket.io/?EIO=2&transport=websocket")) { ws.OnMessage += (sender, e) => API.consoleOutput("Message: " + e.Data); ws.OnError += (sender, e) => API.consoleOutput("Error: " + e.Message); ws.Connect(); ws.Send("server"); } } 连接工作,但我怎么接收服务器的消息? 发送不会引发错误,因此我认为它确实有效。

使用socket.io处理socket.emit()错误

我在用 $('btn').click(function() { socket.emit('load more', function (objs) { // do something }); }); 在客户端从服务器获取对象。 但是有时候连接会丢失,没有任何反应。 我怎样才能使error handling,使我可以告诉用户,服务器不回答,而不是让事情发生,因为它是现在? 编辑 所以我想要的是类似的东西 $('btn').click(function() { var emit = socket.emit('load more', function (objs) { // do something }); if (!emit) { console.log("It didn't work. Maybe you lost connection or the server is not running."); } }); 我知道我不能这样做,但是使用承诺还是可以的?

如何在node.js / socket.io中使用removeListener来防止多重触发function

我有一个关于socket.io/node.js的问题。 我发送客户端到服务器,反之亦然,它触发我的function不止一个,即使我只是触发一次。 所以这是我的代码 客户端; for (var x = circles.length – 1; x >= 0; x–) { if (circle.eat(circles[x])) { position = { x: circles[x].position.x, y: circles[x].position.y, r: circles[x].position.r, index: x }; circles.splice(x, 1); socket.emit('eat', position); //Here's the emit to server. } } 服务器端; var events = require('events'); var eventEmitter = new events.EventEmitter(); socket.on('eat', function(data){ circlePosition.splice(data.index, […]