Articles of 套接字

在nodejs中,我该如何检查一个端口正在侦听还是正在使用

我会在这里非常具体,希望了解这一点的人们可以编辑来改写一般情况。 目前,当你运行“节点debugging”,它产生一个进程监听端口5858.然后在父,试图连接到该端口。 但是,如果您正在运行另一个“节点debugging”会话,则当前“节点debugging”挂起,因为该端口正在使用中。 具体来说,你看到的消息是: $ node debug example/gcd.js 3 5 < debugger listening on port 5858 > connecting… 更好的办法是检测端口正在使用中(没有连接到它可能会混淆正试图连接现有debugging器的另一个客户端)。 编辑:接受的解决scheme现在在trepanjs 。 另请参阅节点JS – 如何通过Einaros WS套接字模块打开套接字?

在socket.io中使用restify时,'headers already sent'错误

我正在跟随正式的游戏指南来使用socketio和restify。 api.js var mongoose = require('mongoose'); var restify = require('restify'); var fs = require('fs'); var server = restify.createServer({ name: 'myapp', version: '1.0.0' }); var io = require('socket.io')(server); server.get('/', function indexHTML(req, res, next) { fs.readFile(__dirname + '/sockettest.html', function (err, data) { if (err) { next(err); return; } res.setHeader('Content-Type', 'text/html'); res.writeHead(200); res.end(data); next(); }); }); io.on('connection', function(socket){ […]

WebSocket连接失败:在WebSocket握手期间出错:意外的响应代码:400

我正在尝试将Socket.io与Angular集成在一起,并且在从客户端到服务器端进行连接时遇到困难。 我已经看过其他相关的问题,但我的问题是本地发生的,所以没有中间的Web服务器。 这是我的服务器代码的样子: const app = express(); const server = http.createServer(app); const io = require('socket.io').listen(server); io.on('connection', function(socket) { socket.emit('greet', { hello: 'Hey, Mr.Client!' }); socket.on('respond', function(data) { console.log(data); }); socket.on('disconnect', function() { console.log('Socket disconnected'); }); }); 我使用Grunt按以下顺序加载客户端JavaScript文件: dist: { src: [ public/bower_components/angular/angular.min.js, … public/bower_components/socket.io-client/dist/socket.io.min.js, public/bower_components/angular-socket-io/socket.min.js, … ] } 然后在我的控制器中: function MyController($scope) { let socket = […]

将更新通知发送给使用socket.io的特定用户

以下是前端的代码,其中storeSelUserId包含用于发送消息的user_id – FYI – 节点版本1.1.0 // Socket Notification var socket = io('http://localhost:6868'); socket.on('connection', function (data) { socket.emit('send notification', { sent_to: storeSelUserId }); }); 以下是路由文件中的服务器代码 – var clients = {}; io.on('connection', function (socket) { socket.emit('connection', "Connection Created."); socket.on('send notification', function (sent_to) { console.log(sent_to); }); }); 在控制台sent_to显示user_id的数组。 现在成为socket.io的入门者,我坚持解决scheme,我如何发送消息到这些特定的用户ID。 我search,发现我需要推动每个用户的sockets,所以我改革它 – var users = []; io.on('connection', function (socket) […]

从Node.js中的TCP套接字读取string时出现问题

我已经实现了使用TCP套接字进行通信的客户机/服务器。 我写入套接字的数据是string化的JSON。 最初一切正常,但是,随着写入速度的提高,我最终遇到了JSONparsing错误,其中客户端的开始部分在旧部分的末尾接收到新写入的开始。 这里是服务器代码: var data = {}; data.type = 'req'; data.id = 1; data.size = 2; var string = JSON.stringify(data); client.write(string, callback()); 以下是我在客户端服务器上接收此代码的方式: client.on('data', function(req) { var data = req.toString(); try { json = JSON.parse(data); } catch (err) { console.log("JSON parse error:" + err); } }); 我收到的错误率是: SyntaxError: Unexpected token { 这似乎是下一个请求被标记到当前结尾的开始。 我试过使用; 作为每个JSON请求结束处的分隔符,然后使用: […]

AngularJS:通过https与socket.io聊天

我正在运行这个示例聊天应用程序https://github.com/btford/angular-socket-io-im使用socket.io/angular/node来做一个基本的即时通讯客户端。 但是,当我尝试通过https工作时遇到麻烦。 没有套接字事件在服务器上被捕获,所以没有聊天消息被发送到客户端,并且用户不能join房间。 我也在socket.io.js的客户端上得到这个错误: Uncaught TypeError: Cannot call method 'onClose' of null 我创build了一个在端口8000上侦听的express https服务器,并将套接字定义修改为: var socket = io.connect('https://localhost:8000',{secure: true, port:8000}); 在js/services.js和/bower_components/angular-socket-io/socket.js 不太清楚如何去解决这个问题。 提前致谢!

如何解决在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 […]