Tag: 套接字

socket.io – 多个事件性能

关于使用socket.io事件。 什么是更好的方法: socket.on('message', function (message) { if(message.message1) { // do something } else if (message.message2) { // do something else } else if … }); VS socket.on('message1', function (message) { // do something }); socket.on('message2', function (message) { // do something else }); … 性能下降的事件数是否有限制? 第二个选项似乎是维护和可读性选项,但是对于每种types的消息而言,事件似乎非常多。 有没有其他的编程范例或最佳做法呢?

在socket.io中添加函数到socket的最佳方法是什么?

是否有连接到socket.io的所有套接字的“原型”? 我想定义一些可用于每个连接套接字的函数。 目前我有: io.sockets.on('connection', function(socket) { //Define properties and functions for socket socket.hello = function(){ console.log("hello from "+socket.id); } socket.hello(); }); 但是我为每个套接字定义了一个“新”hello函数。 有套接字原型吗? 所以我可以有这样的事情: Socket.prototype.hello = function(){ console.log("hello from "+socket.id); } io.sockets.on('connection', function(socket) { socket.hello(); });

Socket.io只发送给当前用户

我在一个基本的应用程序中testingSocket.io,但io.sockets.emit似乎没有按预期工作。 以下是我的相关服务器端代码,Angular socket服务和控制器。 当我运行这个代码时,只有当前连接看到console.log语句。 基于io.sockets.emit我会期待相反的(每一个其他用户看到连接另一个用户时logging的消息)。 server.js: var express = require('express'); var app = express(); var port = process.env.PORT || 8000; var io = require('socket.io').listen(app.listen(port)); io.on('connection', function(socket){ io.sockets.emit('connect', {data: 'hey there!'}); }); console.log('Connected on port ' + port); exports = module.exports = app; socket.service.js: angular .module('app') .factory('socketService', function ($rootScope) { var socket = io.connect(); return { […]

套接字io分裂function到不同的文件

我已经习惯了node.js中的路由工作方式,但是让我给你一个socket.io节点服务器的典型例子: /** * Created by root on 3/13/15. */ var multer = require('multer'); var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var cookieParser = require('socket.io-cookie-parser'); var moment = require('moment'); var mysql = require('mysql'); var users = []; var message = ""; io.use(cookieParser()); io.on('connection', function (socket) { var […]

如何将Socket.io路由代码分离到不同的文件中

假设你有一个这样的server.js : io.on('connection', function (socket) { var userDetails = {}; /* Connection (after login) */ socket.on('userData', function (userDetails) { users[userDetails.id] = socket; userDetails = userDetails; require('user-online.js').register(socket, userDetails); }); //Notification socket.on('sendNotification', function (users, notification) { users.forEach(function (y) { if(users[y] != null){ users[y].emit(notification); } }) }); socket.emit('newNotification', 'hell'); socket.emit('someEvent', 'hello world'); socket.on('browserClose', function (msg) { console.log('this user […]

如何从heroku上的NodeJS应用程序删除socket.io轮询日志?

Heroku不支持websocket,所以在使用socket.io时,我的日志变得超级混乱/socket.io/行。 我怎样才能让他们离开? 2015-05-26T20:57:50.842359+00:00 heroku[router]: at=info method=POST path="/someUsername/today/update" host=complice.co request_id=48483d1f-5389-4dc9-a7e2-0dd975e4cdaf fwd="132.205.236.27" dyno=web.1 connect=2ms service=57ms status=200 bytes=366 2015-05-26T20:57:50.846807+00:00 app[web.1]: 10.69.24.23 – – [26/May/ 2015:20:57:50 +0000] "POST /someUsername/today/update HTTP/1.1" 200 17 2015-05-26T20:57:52.471715+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=2&transport=websocket&sid=sLY-oQMlHNsorbKEAAAh" host=complice.co request_id=8c937877-e06f-4503-b8af-a83a070d6aa0 fwd="184.175.46.182" dyno=web.1 connect=1ms service=2125530ms status=101 bytes=504 2015-05-26T20:58:00.584527+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=2&transport=websocket&sid=pBl47HfKOimvv1V6AAAK" host=complice.co request_id=753f792d-e713-4086-901b-23727ee84a5e fwd="184.175.46.182" dyno=web.1 connect=1ms service=2136303ms status=101 bytes=636 2015-05-26T20:58:05.233626+00:00 […]

套接字io获取断开连接的套接字的ID

我使用socket.io> 1.0编码聊天室 在我的聊天室应用程序中,我尝试了解谁刚断开连接。 要做到这一点,我需要访问套接字的ID。 断开事件被触发后, socket.on('disconnect', function(socket){ //need to learn socket's id here } 我无法检查刚刚离开的人。 我试过socket.id,但是给了一个错误。 我认为套接字对象被删除,因为我无法到达它的任何部分。 而我不想存储所有的套接字标识符,并在剩下的时候循环遍历所有的套接字标识符。 然后,我尝试使用会话中间件在会话中保存套接字的id,但是他们将数据附加到套接字对象,因此使用它是没有意义的(断开连接时所有数据都不存在),或者使用REST调用,但是我没有收到任何REST调用当某人(一个sockets)离开聊天室时。 非常感谢

websockets – 拒绝套接字连接

我正在使用ws作为我的node.js库的套接字库。 所以我的问题是,如果用户没有通过授权过程,我怎么能拒绝一个连接。 var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({port: 6969}); wss.on('connection', function(socket){ // if the socket.upgradeReq.headers.cookie doesn't exists, reject the client }) 非常感谢

仅为模型的所有者广播消息

我正在构build一个应用程序,用户可以创build事件,其他用户可以“join”并向事件添加注释,也可以打开他们之间的聊天,我有一个名为“通知”的模型,我要存储所有通知系统,并且当用户对他的事件发表评论时,我要提醒事件的主人,给他写一个新的信息等等。 这是我写的评论的代码的一部分: 通知模式: /* Notification.js */ module.exports = { attributes: { title: { type: 'string', required: true }, text: { type: 'string' }, type:{ type: 'string', enum: ['new_assistant', 'cancel_assistant', 'new_message', 'new_comment'], required: 'true' }, read: { type: 'boolean', defaultsTo: false }, user: { model: 'user' } } }; 这是我订阅套接字到他的通知模型的地方: Notification.find({ user: owner_id }).then(function(notifications) { return […]

我如何发送一个错误数据包到套接字io中的一个客户端?

我希望能够向客户端发送错误数据包,与注册中间件时的使用方式类似。 这工作: var io = require('socket.io')(); io.use(function(socket, next){ if (socket.request.headers.cookie) return next(); next(new Error('Authentication error')); }); 这不: io.on('connection', function(socket){ socket.emit('error', {errorMessage: 'errorMessage'}); //or socket.emit('error', new Error('error')); }); Error: Uncaught, unspecified "error" event. 如何使用套接字对象发出错误事件?