目前node.js 有大量的websocket库,最流行的似乎是:
然而,我找不到任何一个之间的任何具体的具体比较...显然Socket.io很棒,但已经过时了,并且已经失败了.ws和websocket-node都声称它们是最快的.而engine.io似乎是新的,但比较轻的aletarntives重得多.
如果我们或某人能够将一个答案作为指导,使用哪个套接字库以及何时使用它们,以及它们之间的比较,那将是惊人的.
node.js中socket.io和websockets之间有什么区别?
它们都是服务器推送技术吗?我觉得唯一的区别是,
socket.io允许我通过指定事件名称来发送/发送消息.
在socket.io的情况下,来自服务器的消息将到达所有客户端,但对于websockets中的相同内容,我被迫保留所有连接的数组并循环通过它以向所有客户端发送消息.
另外,我想知道为什么网络检查员(如Chrome/firebug/fiddler)无法从服务器捕获这些消息(来自socket.io/websocket)?
请澄清一下.
要向所有客户发送内容,请使用:
io.sockets.emit('response', data);
Run Code Online (Sandbox Code Playgroud)
要从客户处接收,您使用:
socket.on('cursor', function(data) {
...
});
Run Code Online (Sandbox Code Playgroud)
如何将两者结合起来,以便在从客户端收到服务器上的消息时,我将该消息发送给除发送消息的用户以外的所有用户?
socket.on('cursor', function(data) {
io.sockets.emit('response', data);
});
Run Code Online (Sandbox Code Playgroud)
我是否必须通过发送带有消息的client-id然后在客户端检查或者是否有更简单的方法来破解它?
我对网络开发的世界很陌生并且加入了这个潮流,因为我发现HTML5的概念非常有趣.我对使用canvas非常有信心,现在想转移到websockets部分.我已经开始了解socket.io是迄今为止使用的框架,当我们想要使用Web套接字时.
关于什么教程和示例参考总虚拟的任何指针将非常感谢!
我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示:
client.send(message, receiverSessionId)
Run Code Online (Sandbox Code Playgroud)
但是这些.send()
和.broadcast()
方法似乎都不能满足我的需要.
我发现作为一种可能的解决方案是,该.broadcast()
方法接受一个不发送消息的SessionIds数组作为第二个参数,因此我可以将当前连接的所有SessionId的数组传递给服务器,除了一个我希望发送消息,但我觉得必须有更好的解决方案.
有任何想法吗?
我正在调查nodejs/socket.io进行实时聊天,我需要一些建议来实现房间.
哪个更好,使用命名空间或使用房间功能完全隔离聊天的grops?
房间和命名空间之间真正的技术差异是什么?
有资源使用差异吗?
我正在尝试使用我的SSL证书运行socket.io但是,它将无法连接.
我将我的代码基于聊天示例:
var https = require('https');
var fs = require('fs');
/**
* Bootstrap app.
*/
var sys = require('sys')
require.paths.unshift(__dirname + '/../../lib/');
/**
* Module dependencies.
*/
var express = require('express')
, stylus = require('stylus')
, nib = require('nib')
, sio = require('socket.io');
/**
* App.
*/
var privateKey = fs.readFileSync('../key').toString();
var certificate = fs.readFileSync('../crt').toString();
var ca = fs.readFileSync('../intermediate.crt').toString();
var app = express.createServer({key:privateKey,cert:certificate,ca:ca });
/**
* App configuration.
*/
...
/**
* App routes.
*/
app.get('/', function (req, res) { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取当前连接的所有套接字/客户端的列表.
io.sockets
遗憾的是,它没有返回数组.
我知道我可以使用数组保留自己的列表,但不要认为这是一个最佳解决方案有两个原因:
冗余.Socket.IO已经保留了此列表的副本.
Socket.IO提供了为客户端设置任意字段值的方法(即:),socket.set('nickname', 'superman')
所以如果我要维护自己的列表,我需要跟上这些变化.
救命?
[add]所以我的下一个问题是,当我尝试添加一个新的依赖(npm install --save socket.io).JSON文件也有效.我收到此错误:无法解析json
npm ERR! Unexpected string
npm ERR! File: /Users/John/package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR!
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse
Run Code Online (Sandbox Code Playgroud)
所以我一直试图弄清楚为什么这个错误已经回归.所有文件(HTML,JSON,JS)都在我桌面上的同一文件夹中.我正在使用node.js和socket.io
这是我的JS文件:
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
res.sendFile('index.html');
});
http.listen(3000,function(){
console.log('listening on : 3000');
});
Run Code Online (Sandbox Code Playgroud)
这是返回的内容:
MacBook-Pro:~ John$ node /Users/John/Desktop/Chatapp/index.js
listening on …
Run Code Online (Sandbox Code Playgroud) 在Node.js服务器中使用socket.IO时,是否有一种简单的方法来获取传入连接的IP地址?我知道你可以从标准的HTTP连接中获取它,但socket.io是一个不同的野兽.
node.js ×10
socket.io ×10
websocket ×5
javascript ×4
dependencies ×1
engine.io ×1
firebug ×1
html5 ×1
https ×1
ip-address ×1
json ×1
server-side ×1
sockjs ×1
ssl ×1