Tag: 套接字

如何解决在sails.js的SocketIO握手过程中没有可用的有效会话?

我正在使用sails.js开发一个iOS应用程序的API,并使用websockets进行实时通信。 问题是,我不能让套接字握手工作。 控制台中显示“此套接字中没有可用的有效会话”错误。 当我谷歌search了一下,我才知道我需要设置一个有效的cookie。 由于我的客户端不是基于浏览器的Javascript,我不能设置任何cookie。 我甚至在config/sockets.js设置了authorization: false 有没有解决这个问题? 还是selectSails JS这个任务是一个错误? 顺便说一句,这些是我遇到这个问题的一些链接: https://github.com/balderdashy/sails/issues/1062 https://github.com/balderdashy/sails/issues/995 https://github.com/balderdashy/sails/issues/1003

从Socket.IO中删除端口并更改目录

在Ubuntu 15.04上使用Apache我试图从URL中有效地移除端口3000,并将path更改为http://example.com/{app}/socket.io… 使用ProxyPass和ProxyPassReverse我已经从URL中有效地移除了端口,并相应地更新服务器和客户端以更改path。 虚拟主机变化: ProxyPass /path/ http://example.com:3000/path/ ProxyPassReverse /path/ http://example.com:3000/path/ 我做的服务器端更改如下: var io = require('socket.io')(http, {path: '/path/socket.io' }); app.get('/path/', function(req, res){ 而我所做的客户更改如下: var socket = io({path: '/path/'}); 一切似乎运行顺利,直到我打开我的控制台日志,看到使用铬时, GET请求过多。 这肯定会杀死我的带宽,我想我设法不正确地听取了套接字,导致大量的GET请求。 有人可以提供一些指导,我可能会做错什么?

如何使用Node.js / Express + Passport + Websockets进行身份validation?

我正在构build一个使用Passport.js和OAuth策略进行身份validation的angular2-login-seed 。 很显然,使用这些工具进行身份validation的默认方法是使用通过express签名的HTTP cookie。 从我所知道的护照pipe理实际的Set Cookie头,以便express可以通过request.isAuthenticated()validation每个后续请求,并通过req.session.passport.dataHere访问由护照设置的数据。 我想通过websockets将实时数据整合到应用程序中。 这当然意味着从服务器到客户端的套接字stream。 这个通信完全独立于普通的HTTP服务器请求,意思是: 它不包含所有HTTP请求包含的HTTP cookie Express不会与套接字进行交互,它使用后端使用的任何实现(sock.js,socket.io)进行pipe理。 这使得简化表示HTTP请求之间的authentication以及websocket数据到后端是困难的,因为它们是单独的通信方法。 从我的研究来看,这给了我两个select。 其中之一是使用库来给我的套接字实现(最好是socket.io上的sock.js,但我需要做更多的研究)访问快速会话。 然后,我可以validation套接字连接,但我想要的。 问题是我不知道如何将快速cookie从前端的stream,因为JavaScript无法访问它(HTTP只有cookie)。 我见过的另一个常见解决scheme是使用JWT(JSON Web Tokens)。 围绕这个存储的实现将JWT存储在前端的localstorage中。 这是SPA(在我的情况下,Angular2服务)可以发送每个请求“无状态”服务器身份validation,我们可以通过websocket发送validationwebsocket连接(前端JS显然有权访问本地存储) 。 想到这个实现时,想到了几件事情: Passport OAuth策略甚至有可能使用JWT而不是常规会话信息? 这将涉及什么样的修改? 从我可以告诉Passport策略使用某种forms的OAuth1或OAuth2父策略进行身份validation,默认使用Cookie。 将这个重要的信息存储在本地存储中将会打开应用程序直到安全漏洞(XSS,CSRF等) 如果是这样,我见过的最常见的解决方法是将JWT存储在一个cookie中,这样它不能被轻易访问,欺骗或伪造。 但是,这使我回到了之前使用智威汤逊的地位,所以不用担心。 这是否意味着我不得不在后端使用某种状态pipe理存储(例如Redis)来pipe理JWT主体的身份validation和解码? (我对Redis一无所知,等等)。 连接服务器HTTP请求和套接字数据之间的身份validation的想法很奇怪,但对正确authentication一个套接字连接看起来至关重要。 我有点惊讶一个更简单的方法不存在。 我已经做了一些研究,并且看到了诸如socketio-jwt , express-jwt等等的东西,但是我不知道这是否可以用Passport策略进行可pipe理的转换,或者如果打开快速会话数据到套接字的实现,或者如果我正在做这一切都错了! 任何帮助或指导将非常感谢。

node.js – 在进程之间共享套接字

我读过可以在进程之间共享套接字。 这在Node.js中也是可行的吗? 我在node.js中看到了cluster api,但那不是我要找的。 我希望能够在一个进程中接受连接,也许发送和读取一点点,并在一段时间后通过此套接字到另一个完全独立的node.js进程。 我已经可以用pipe道来做这个了,但是我不想这样做,因为它不像直接读写套接字本身那么快。 有任何想法吗? 更新我在node.js文档中find了以下条目: new net.Socket([options]) # Construct a new socket object. options is an object with the following defaults: { fd: null type: null allowHalfOpen: false } fd allows you to specify the existing file descriptor of socket. type specified underlying protocol. It can be 'tcp4', 'tcp6', or 'unix'. About […]

laravel用redis和socket io回显

我有一个事件SomeEvent.php 像这样: <?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class SomeEvent implements ShouldBroadcast { use InteractsWithSockets, SerializesModels; public $data; /** * Create a new event instance. * * @return void */ public function __construct($array) { $this->data = $array; } /** * Get the channels the event should […]

连接Unity3d与Node.js

我正在尝试使用socket.io来连接我的unity3d程序与node.js服务器。 使用UnitySocketIO,我成功连接了客户端和服务器端。 但是,On或Emit方法不起作用。 有人可以帮我解决这个问题吗? void Start () { string socketUrl = "http://127.0.0.1:50122"; Debug.Log("socket url: " + socketUrl); this.socket = new Client(socketUrl); this.socket.Opened += this.SocketOpened; this.socket.Message += this.SocketMessage; this.socket.SocketConnectionClosed += this.SocketConnectionClosed; this.socket.Error += this.SocketError; this.socket.Connect(); } private void SocketOpened (object sender, EventArgs e) { Debug.Log("socket opened"); // i got this message this.socket.On ("message", (data) => { […]

如何将video(从getUserMedia)发送到Node.js服务器?

我正在build立一个聊天/直播应用程序(video+文字聊天)。 目前我还没有解决办法,但是我正在向前迈进,而且我陷入困境。 我正在尝试使用getUserMedia获取videostream,并通过Socket.io将其发送到我的Node.js服务器。 到目前为止,我已经得到了bloburl: "mediastream:http://192.168.1.20:3000/1c267861-a2da-41df-9a83-ae69fdfd883b"但我不知道如何从它抓取数据通过套接字发送.IO。 任何帮助将摇滚。 服务器: // server.js var http = require('http'); var socketio = require('socket.io') var fs = require('fs'); var server = http.createServer(function (req, res) { if (req.url ==='/') { fs.readFile('index.html', function (err, html) { res.writeHeader(200, {"Content-Type": "text/html"}); res.write(html); return res.end(); }); } else { res.end('hi!'); } }); var io = socketio(server); server.listen(8000, […]

带有express的socket.io中的SSL:缺lessPFX或证书+私钥。

我想通过SSL与socket.io套接字。 我读过其他答案,但没有任何工作 这是我的代码: var ssl_options = { key : fs.readFileSync(my_key_path), cert : fs.readFileSync(my_cert_path) }; var protocol = "https"; preparedApp = require(protocol).createServer(ssl_options,app); var io = require('socket.io')(preparedApp); preparedApp.listen(8080, function(){}); io.on('connection', function(socket){}); 这里是我的ssl_options的日志… { key: <Buffer 41 …>, cert: <Buffer 4a …> } 这个错误与标题throw new Error('Missing PFX or certificate + private key.'); 。 有谁知道可能会发生什么? 这个答案的其他解决scheme没有解决我的情况。

发送从客户端到服务器节点上断开事件的数据

我不能发送断开连接事件从客户端的数据到服务器 //客户端 var gname = "asd"; socket.emit('disconnect',gname); //服务器端 socket.on('disconnect', function (data) { console.log(data); var i = connect_clients.indexOf(data); if(i != -1) { connect_clients.splice(i, 1); } }

在Nodejs中读取原始http消息

我使用http.request函数发送一个http请求,我想读取整个http响应,如文本; 也就是原始的http协议文本。 可能吗? 我写了下面的代码,但它不工作。 // Set up the request console.log('Sending request'); var post_req = http.request(post_options, function(res) { res.setEncoding('utf8'); console.log('Response statusCode: ' + res.statusCode); // res.on('data', function (chunk) { // console.log('Response: ' + chunk); // }); // res.on('end', function() {}); }); post_req.on('socket', function (socket) { var response = ""; socket.on('data', function(chunk){ console.log(chunk); }); }); // post […]