Tag: websocket

socket.io – 第一次工作,而不是第二次

当我启动我的node.js服务器和客户端连接,我能够发送来自客户端(socket.emit)的请求,并得到一个响应(socket.on('rentsAround'….))。 但是当我第二次连接时,客户端可以发送,但服务器不能发送或发送。 所以我必须重新启动服务器。 我明白,这是按预期工作,但不知何故,我的理解是错的地方…有人请指出。 客户端:======== var socket = new io.Socket(); socket = io.connect(); socket.on('rentsAround', function(data){ registration.handleRentsAround(data); }); socket.on('locationDetailsRes', function(data){ registration.handleRentsAround(data); }); socket.on('connect', function(data){ alert('inside connect on client side'); }); socket.on('disconnect', function(){ // do something, if you want to. }); …………. socket.emit("searchRent", {"lat":lat, "lng":lng}); 服务器端:======== socket.sockets.on('connection', function(client){ client.on('searchRent', function(msg){ console.log('inside on connection'); // do something and […]

Mongodb通知文件更新

想象一下,如果我有一些mongodb与一些文件和一个nodejs服务器,从mongodb发送到客户端使用socket.io的json数据,并且一些进程已更新当前在客户端视图中的mongodb文档,我想知道是否有一种方式,以便mongodb通知nodejs服务器何时由客户自己以外的任何人更新对象,以便我可以通过打开的套接字发送更新的文档json,这样的事情可能吗? 我试图find一些资源在谷歌没有运气。

Django,socket.io,node.js – pipe理私人消息和群组对话

我正在编写Facebook Messenger或WhatsApp等服务的后端。 我开始遵循这个精彩的教程 。 我用一个用Python(Django)编写的API来做到这一点。 除了这个API之外,我还有一个Redis进程和一个运行node.js的服务器(仅限本地主机)。 node.js服务器使用socket.io库通过websockets进行实时通信 包含消息的HTTP请求可以从任何客户端发送到Django API,而Django API则将消息发布到某个通道上的Redis。 node.js服务器订阅了Redis通道,并在发布这样的消息时得到通知。 节点跟踪哪些套接字当前与一些用户标识符键入的套接字ID数组连接。 我有几个关于这个问题: 1.私人信息 我想发送针对某个用户的消息。 我最初的做法是让HTTP请求(发送给Django)包含消息应该到达哪个用户。 当此消息到达node.js服务器(通过redis)时,节点可以在一个客户端数组中find该用户。 Django显然(?)需要知道哪个socket.io套接字属于哪个用户。 即Django需要知道节点应该使用哪个用户标识键来获取正确的套接字。 这是一个好方法吗? 由于我只使用一个发布渠道,Redis服务器会成为瓶颈吗? 当源用户发送消息时,如果消息的目标用户处于脱机状态,会发生什么情况? 我想抓住这个事件并发送推送通知。 2.房间 如果没有启动和维护组对话的function,此服务将不会有任何好处。 从我读过的,我应该为此创buildsocket.io:s 房间 。 那么我的问题是,如何保持会话之间的空间? 如果参与群组会话的每个用户都脱机,并从node.js服务器的客户机arrays中删除。 我能以某种方式在Django服务器的会话之间存储会议室吗? 任何帮助和/或反馈/想法是不胜感激。 谢谢

WebSocket服务器不支持SSL

我有一个使用websockets的工作聊天应用程序。 我想更进一步,并在我的连接上启用encryption,但是当我使用https连接到http服务器时,我的连接开始失败。 我在我的所有网站(在同一顶级域名(TLD)下提供了自签名证书,这意味着它是通配证书)。 我可以确认这是一个有效的证书,所以问题不应该在那里。 这是什么工作(未encryption) var webSocketServer = require('websocket').server; var http = require('http'); var server = http.createServer(function() {}); server.listen(webSocketsServerPort, function () { log("system", "Server is listening on port " + webSocketsServerPort); }); var wsServer = new webSocketServer({ httpServer: server }); 现在我可以连接到ws://my.domain:port 。 这是不行的 var webSocketServer = require('websocket').server; var http = require('https'); var fs = require('fs'); […]

我如何处理集群的Socket.IO房间?

我有一个服务器与集群工作,并使用socke.IO工作我使用粘滞会话,但我有我的房间有问题(我不知道我做的方式是最好的select):集群正在实例化进程,每个进程都有特定数量的房间。 服务器 过程1 会议室1 室2 房间N 过程2 会议室1 室2 房间N 我做的连接一些用户到房间(只有一个进程)的方式是使用路由,在这里用户访问一个页面,当他试图与Socket.io连接时,我检查URL和插入的信息他在一个房间里。 我的问题是使用集群来实现这个服务器我不能在特定的房间中插入用户,因为有一些房间只存在于特定的进程中,粘滞的会话把他放在另一个进程中。 我怎样才能把用户放在另一个进程的房间? 此外,使用只能看到他在服务器上的过程的路线,我想显示页面中的每个房间。 我已经阅读了Redis-Adapter,但是在使用Socket.io + Cluster(Sticky-session + redis-adapter)+房间的github上找不到解决scheme。 按照我的代码分享我所做的: //Cluster.Master with simplified Code if (cluster.isMaster) { var workers = []; // Spawn workers. for (var i = 0; i < num_processes; i++) { spawn(i); } // Create the outside facing server listening on our […]

如何在Node.js中一次性离开套接字所连接的所有房间

我有一些代码在一个套接字被join多个房间。 在代码中的某个时刻,我想离开所有的房间,而不用断开sockets。 是否有可能做到这一点? 如果是,那我该怎么做? 提前致谢..

socket.io强制断开客户端

我可能在这里做错了事,但是我无法理解这一点。 以下不起作用: 客户 $("#disconnectButton").click(function() { socket.emit("disconnect"); }); 服务器 socket.on("disconnect", function() { console.log("this never gets called"); }); 我不能手动从客户端调用断开连接事件吗? 因为以下工作: 客户 $("#disconnectButton").click(function() { socket.emit("whatever"); }); 服务器 socket.on("whatever", function() { socket.disconnect(); console.log("this gets called and disconnects the client"); });

长期投票的严重缺点?

对于交互式Web应用程序,像Websockets这样的东西越来越受欢迎。 然而,由于客户端和代理世界并不总是完全兼容,所以通常会使用像“Socket.IO”这样的复杂框架,对于任何可能会禁用其他框架的情况隐藏几种不同的机制。 我只是想知道一个正确实现的长轮询的缺点是什么,因为今天的服务器比如node.js很容易实现,并依赖于很好的支持旧的http技术(尽pipe长时间的轮询行为本身可能会打破它)。 从高层次来看,长时间轮询(尽pipe有一些额外的开销,适用于中等stream量的应用程序)类似于WebSockets所做的真正的推送行为,因为服务器每当他喜欢(尽pipe有一些超时/心跳机制)实际发送它的答案。 所以我们有更多的开销,因为我猜测TCP / IP更多的确认,但没有像频繁轮询那样的持续stream量。 而使用事件驱动的服务器,我们将不会有线程开销来阻止连接。 那么是否还有其他困难的缺点,迫使像聊天这样的中等stream量应用使用WebSockets而不是长时间轮询?

Websocket,socket.io,nodejs和安全性

我正在研究实时分析应用程序,并使用websockets(通过socket.io库)和nodejs。 不会有通过websockets发送的“敏感”数据(比如名字,地址等)。 它只会用于跟踪访问量并跟踪访问者总数(以及访问量排名前十位的访问者数量)。 我应该知道哪些安全问题? 我是否打开自己: DoS攻击? XSS攻击? 还有哪些安全漏洞可以用来访问networking服务器/networking服务器的局域网? 还有什么我没有在这里提到的? 谢谢!

如何用Socket.io和Node.js开发一个大型的聊天应用程序

在过去的几个月中,我一直在使用Socket.io,开发一个相当复杂的聊天室,踢/禁止/版主/朋友等应用程序。 在开发过程中,我重写了这个应用程序好几次,而且还在为我的代码而战。 我非常喜欢JavaScript,但是我发现在应用程序不断增长的时候很难保持它。 我已经阅读了大量有关如何编写聊天应用程序的“教程”,但都涵盖了最基本的方面。 GitHub上的所有示例应用程序也是如此,甚至是我在网上find的大多数聊天应用程序(其中大多数只是简单的即时消息,没有任何用户pipe理)。 有些用例对我来说太荒谬了,比如踢一个房间的用户。 主持人点击一个踢button – >发送事件到服务器 服务器将用户名与套接字配对(或者只是广播给所有用户,并在客户端进行过滤) – >发送给他踢的事件 用户向服务器发出注销事件,并且还显示他被踢的消息(注销只是我执行的处罚) 用户将从聊天室的用户列表中删除 – >将当前用户列表发送给房间中的所有用户 这似乎不太复杂,但是当我添加所有在客户端发生的callback来pipe理UI(因为我使用AngularJS,我使用事件在控制器之间进行通信)以及服务器端的大量callback,因为一切都是非阻塞的,我觉得这个testing真的很难。 在客户端还有另外一个问题,我必须在多个地方监听套接字事件,所以我必须有一种单例全局套接字对象,并在多个地方挂接事件监听器。 我做错了什么,或者是这个callback地狱的工作与websockets没有办法的结果吗? 有没有什么方法可以使开发这样的应用程序更容易? 例如替代技术到Socket.io? 到目前为止,我只find了5个月前上次提交的NowJS和meteor ,这真的很酷,但是看看网站看起来并不稳定。