Articles of websocket

在Heroku和Node.js上扩展websockets

让我们假设我有一个大的应用程序处理Heroku上有意义的websockets连接数量。 为了应付这样的大量需求,指令数增加到N Heroku的路由器如何在运行的dynos之间分配新的传入的websocket连接? 换句话说,如果其中一个dynos在websockets连接中最大化,Heroku的路由器将会偏离其他(据说)不太繁忙的dynos中的所有新的传入请求? 还是仍然使用http传入连接的文档中所述的随机分配? 这肯定是有道理的,因为websockets连接是第一个例子中的http连接。 但是,在N正在运行的dynos之间平均地扩展大量的持久连接是相当复杂的。 有人确认吗?

运行在虚拟机和主Web服务器内的Node.js实例

我非常熟悉Node.js的asynchronous,事件驱动,非阻塞编程模型的编程范例。 我现在正试图了解在虚拟机的云计算生态系统中如何扩展Node.js的使用范围。 在我的Web仪表板的服务器端,我有Node.js作为http服务器运行,并与Cassandra数据库进行交互。 用户通过浏览器仪表板与我们的云服务进行交互。 在客户端和服务器之间打开的Websockets将允许服务器端向用户的仪表板启动操作。 部分用户的任务活动将是产生工作stream活动的基于云的虚拟机。 这些虚拟机将执行需要与系统主Cassandra数据库交互的应用程序。 我非常希望对以下Node.js体系结构scheme有一些反馈意见: 当用户生成虚拟机时,虚拟机将启动,并在虚拟机上运行一个Node.js实例 。 该VM的Node.js实例主动打开一个Web套接字,该套接字具有正在运行或分配的系统的主要Node.js实例 (可能有多个可用于与Cassandra数据库通信的Node.js实例),即Node-从虚拟机的Node.js实例build立到节点websocket 。 VM的Node.js实例设置了一系列要在VM内部观察的事件。 系统的Node.js实例还从VM的Node.js实例中设置了一系列要监视的事件。 当虚拟机的Node.js实例事件触发完成后,启动并完成所需的Cassandra DB操作。 系统的Node.js实例还监视来自VM的特定事件,以启动Cassandra DB操作。 实际上,我在这里问的是: 在两个Node实例与同一个后端数据库交谈的情况下,通过websocketsbuild立Node.js-2-Node.js通信通道是否有意义? 在这个configuration中,似乎我能够build立一个高度灵活的双向虚拟机事件系绳,可以监视/监听来自系统的Node.js实例和VM节点的DBlogging动作的规定事件。 js实例。 我在这里描述的是一个非典型的和无意义的情景? 在这个用例中有更好的方法来使用Node.js吗? 有没有更适合的组件configuration? 亲切的问候,马克

通过自定义socket.io事件将Python客户端连接到Socket.io

我有一个socket.io服务器(在node.js中),我试图连接一个Python客户端,主要是为我的套接字服务器提供一个命令行界面。 我正在使用Python的Web套接字,但是,我意识到这只支持四个“事件”:打开,closures,错误和消息。 我的socket.io服务器定义了诸如.on('connection')类的自定义事件。 我怎么能发射/接收这样的自定义事件在Python中? 这是我的脚本到目前为止,只是启动和closures,所以它不起作用。 导入networking套接字,请求,线程,时间主机=' http://socket-url-server.com ' def on_open(ws): def run(*args): print 'did connect' for i in range(3): time.sleep(1) result = ws.recv() print 'received:' print result time.sleep(1) ws.close() print "thread terminating…" thread.start_new_thread(run, ()) def on_message(ws, message): print message def on_error(ws, error): print error def on_close(ws): print "### closed ###" print('Connecting to %s' % host) […]

WS websocket send()作为一个函数

我有这个问题。 我连接到另一个服务器的socket.io(工程),我想通过WS发送到客户端(处理)。 主要的问题是它只发送一次,我想发送所有的socket.io得到一个input。 实际代码: var io = require("socket.io-client"); var socket = io.connect('http://socket.io.server:8000'); var WebSocketServer = require('ws').Server , wss = new WebSocketServer({port: 8080}); var temp = 0; socket.on('connect', function () { console.log("socket connected") ; }); socket.on('udp message', function(msg) { temp = msg/100; console.log(temp) ; wss.on('connection', function(ws) { ws.send(temp.toString()); }); }); 我想要什么: socket.on('udp message', function(msg) { temp […]

在node.js中正确使用本地和全局variables

我越来越近了,我想了解全局和本地对象如何在node.js中工作,但是当涉及更复杂的服务器时,我正在被绊倒。 在我的理解node.js服务器被许多访问,但应该只实例一次,所以这混淆了我的地狱,我不知道其他服务器如何行为(我使用的networking套接字服务器https:/ / npmjs.org/package/ws ) 我也明白: var _global='global'; function testing(){ var _local='local'; console.log(_global+' & '+_local);// 'global & local' return;} testing(); console.log(_global+' & '+_local);// 'global & undefined' 现在在node.js中,如果我声明在服务器内的_local var意味着它是每个人的唯一variables? 如果我创build一个全球服务器: var wss=new WebSocketServer({host:port}); wss.on('connection',function(soc){ soc['uid']=Math.floor(Math.random()*101); console.dir(soc); }); 导航到连接到服务器的页面,我看到(在我的putty ssh客户端上)带有附加ID的websocket对象。 然后,如果第二个用户访问该页面,我看到(在SSH中)websocket对象现在看起来像一个新的对象没有旧的ID只是一个新的我没有看到两个连接… 所以我在想 我应该把这个socketserver放在一个http.server中,并用ajax调用服务器吗? 客户: var xhr=XHRobject(); xhr.open("POST","mysite.com:8005",true); xhr.setRequestHeader("Content-Type","text/csv"); xhr.send('create server'); 服务器: var http = require('http'); http.createServer(function(req,res){ req.on('data',function(chunk){ […]

关于io.sockets.manager的各种问题和Socket.io的联接function

我有一些关于Socket.io的问题,无法find以下术语/函数/ Socket.io的任何答案。 这些在数百个例子中被用来创build聊天系统,但是没有一个已经清楚地定义了这些术语的作用。 io.sockets.manager做什么? io.sockets.join()做了什么? client.leave()可以用来离开一些联合空间吗? 或者是什么? 而另一个问题是,如果我创build了拥有不同房间ID的Rooms数组。 现在我怎样才能把信息发送给特定的房间呢? 假设 var Rooms = [ { 'a' : 'Room1' }, { 'b' : 'Room2' }, { 'c' : 'Room3' } ] 我怎样才能发送信息给Rooms['a'] ? 喜欢发信息给所有人,这只是: io.sockets.emit('server_says', { msg: 'Hello All'}); 我在哪里可以find一些文章,所有这样的function,如join() , manager等与他们的细节find? 请尽可能提供一些代码,以便我能更好地理解。

在会话ID中包含工作端口号的安全影响

我写了一个多进程实时WebSocket服务器,它使用会话ID来根据正在监听的端口号将stream量负载平衡到相关的worker。 会话ID包含主机名,源端口号,工作端口号以及工作人员用来唯一标识客户端的实际哈希ID。 典型的会话ID如下所示: localhost_9100_8000_0_AoT_eIwV0w4HQz_nAAAV 我想知道将工作端口号(在这种情况下为9100)作为会话ID的一部分的安全含义。 我有点担心拒绝服务(DoS)威胁 – 理论上,这可能会允许恶意用户生成大量针对特定端口号的HTTP请求(例如,使用包含该端口号的假sessionID ) – 但是这是一个严重的威胁? (假设你有体面的防火墙)? 像Google这样的大公司如何从安全angular度处理粘性会话? 还有其他的威胁我应该考虑吗? 我这样devise服务器的原因是要考虑到最初的HTTP握手,以及什么时候客户端不支持WebSocket(在这种情况下,使用HTTP长轮询 – 因此,来自客户端的后续HTTP请求需要去在后端的同一个工人)。

Socket.io – 分享“朋友活动”的devise模式

我正在为某些客户端(手机,单页面应用程序…)编写一些NodeJS应用程序。 应用程序是游戏和相当社交 – 用户可以有朋友和游戏需要实时共享他们之间的事件。 所以我决定使用Socket.io。 如何有效地分享用户朋友的连接套接字之间的事件? 一个用户可以连接多个客户端(所以他有更多的连接套接字)。 使用socket.io“房间”是好主意,每个用户有一个房间,当某个事件发生的时候,这个房间是我朋友的每个房间的空间。 如何有效地处理这个? 为了更好的概念,你可以想象它与Facebook墙(或朋友活动的右侧面板)相同的方式。 你将如何处理?

如何在socket.io事件中访问快速会话?

我目前正在使用express和socket.io,并构build了一个只接受已经login的用户的socket.io连接的应用程序,我举了一个简单的例子。 请参阅io.sockets.on('连接')部分: var express = require('express'); var app = express(); var http = require('http').createServer(app); var io = require('socket.io').listen(http); var sessionStore = new express.session.MemoryStore(); io.set('authorization', function (handshake, accept) { // I got this from a gist. // Don't know the link anymore, though. var cookies = require('express/node_modules/cookie').parse(handshake.headers.cookie); var parsed = require('express/node_modules/connect/lib/utils').parseSignedCookies(cookies, 'SESSION_SECRET'); sessionStore.get(parsed.sid, function (error, session) […]

socket.io-client是否适合作为XSockets.NET服务器的套接字客户端?

我在C#服务器和node.js客户端之间开发了一些套接字桥接器。 首先,我想使用传统的TCP / IP套接字,但是第二个想法是websocket在节点的asynchronous风格编程中更容易。 XSockets.NET看起来不错,干净,我会用它作为一个websocket服务器。 我知道ws广泛用于节点的基本websocket层,但是我们有socket.io或engine.io。 我不知道是否socket.io客户端是一个适当的select作为一个套接字客户端,并希望仔细检查我想念。 在这种情况下你有其他的select吗? 也许,任何抽象层是不需要的,我应该只使用ws .. 谢谢!