相关疑难解决方法(0)

socket.io和websockets之间的差异

node.js中socket.io和websockets之间有什么区别?
它们都是服务器推送技术吗?我觉得唯一的区别是,

  1. socket.io允许我通过指定事件名称来发送/发送消息.

  2. 在socket.io的情况下,来自服务器的消息将到达所有客户端,但对于websockets中的相同内容,我被迫保留所有连接的数组并循环通过它以向所有客户端发送消息.

另外,我想知道为什么网络检查员(如Chrome/firebug/fiddler)无法从服务器捕获这些消息(来自socket.io/websocket)?

请澄清一下.

firebug google-chrome websocket node.js socket.io

403
推荐指数
8
解决办法
17万
查看次数

WebSockets和Apache代理:如何配置mod_proxy_wstunnel?

我有 :

  1. Apache(v2.4)在我的服务器的端口80上www.domain1.com,启用了mod_proxymod_proxy_wstunnel

  2. node.js + socket.io 在同一服务器的端口3001上.

www.domain2.com由于此处描述的方法,访问(使用端口80)重定向到2 . 我在Apache配置中设置了这个:

<VirtualHost *:80>
    ServerName www.domain2.com
    ProxyPass / http://localhost:3001/
    ProxyPassReverse / http://localhost:3001/
    ProxyPass / ws://localhost:3001/
    ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

除了websocket部分之外,它适用于所有内容:ws://...不会像代理那样传输.

当我访问该页面时www.domain2.com,我有:

Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Run Code Online (Sandbox Code Playgroud)

问题:如何使Apache代理也成为WebSockets?

apache proxy websocket node.js socket.io

77
推荐指数
9
解决办法
11万
查看次数

在Heroku Node.js应用程序上的Socket.io和多个Dyno.在建立连接之前关闭WebSocket

我正在构建一个部署到Heroku的App,它使用Websockets.

当我只使用1个dyno时,websockets连接正常工作,但当我缩放到> 1时,我得到以下错误

POST http://****.herokuapp.com/socket.io/?EIO = 2&transport = polling&t = 1412600135378-1&sid = zQzJJ8oPo5p3yiwIAAAC 400(错误请求)socket.io-1.0.4.js:2

WebSocket连接到'ws://****.herokuapp.com/socket.io/?EIO = 2&transport = websocket&sid = zQzJJ8oPo5p3yiwIAAAC'失败:WebSocket在建立连接之前关闭.socket.io-1.0.4.js:2

我正在使用Redis适配器来启用多个Web进程

var io = socket.listen(server);
var redisAdapter = require('socket.io-redis');
var redis = require('redis');

var pub = redis.createClient(18049, '[URI]', {auth_pass:"[PASS]"});
var sub = redis.createClient(18049, '[URI]', {detect_buffers: true, auth_pass:"[PASS]"} );

io.adapter( redisAdapter({pubClient: pub, subClient: sub}) );
Run Code Online (Sandbox Code Playgroud)

这正在localhost(我正在使用工头运行,正如Heroku所做的那样,我正在启动2个Web进程,与Heroku相同).

在我实现redis适配器之前,我遇到了Web套接字握手错误,因此适配器已经产生了一些影响.此外它现在偶尔工作,我假设当套接字匹配相同的web dyno.

我也尝试启用粘性会话,但它永远不会有效.

var sticky = require('sticky-session');
sticky(1, server).listen(port, function (err) {
  if (err) {
    console.error(err);
    return process.exit(1);
  }
  console.log('Worker listening on %s', port); …
Run Code Online (Sandbox Code Playgroud)

heroku websocket redis node.js socket.io

24
推荐指数
3
解决办法
4714
查看次数

socket.io什么时候使用轮询而不是websockets?

我是socket.io的新手,并在node/express/socket.io中编写了我的第一个应用程序.现在一切都在我的nginx服务器上运行良好.我想向公众发布我的应用程序,但我担心它不适用于很多人.我有几个朋友测试我的应用程序,一切顺利(这是一个非常简单的应用程序).这是我的担忧:现在每个连接似乎都在使用websockets,这就是我想要的.但是,由于客户端的一些奇怪的东西,我的应用程序有时会降级为"轮询"吗?如果是这样,socket.io如何决定何时使用轮询以及何时使用websocket(它是基于浏览器/版本或连接还是什么)?我很确定它在可能的情况下使用websocket,但是有一个列表可以将其归结为"轮询"吗?此外,有没有办法我可以通过使用"轮询"来检查我的应用程序是否有效?

我可以发布代码,但我认为这是关于socket.io如何工作的一般问题.

nginx websocket node.js socket.io

6
推荐指数
1
解决办法
3437
查看次数

socket.io 自动断开socket

当我在电子中运行 socket.io 时,我在开发人员控制台中不断收到此错误。

engine.io-client:socket probe transport "websocket" failed because of error: transport closed +6s
Run Code Online (Sandbox Code Playgroud)

当我建立它时,套接字总是立即断开连接。我的客户甚至没有得到 socket.emit 我一建立连接就做,直到一两分钟后。

客户端和服务器使用相同版本的 socket.io。

服务器:

io.on('connection', function(socket){
  socket.emit('got it','');
  console.log('Socket connection established');
});
Run Code Online (Sandbox Code Playgroud)

客户:

var socket = require('socket.io-client')('http://localhost:3000');
console.log(socket);
socket.on('got it', function(a){
  console.log('connected');
  console.log(socket);
})
Run Code Online (Sandbox Code Playgroud)

这不是完整的代码,但是除了一些不应该影响连接的其他侦听器之外,没有其他任何东西可以与 websockets 交互。

服务器没有显示任何问题。每次有人连接时它都会告诉我,但是当我尝试以任何一种方式发出任何内容时,收件人都不会立即得到它。每次单击发送发射的按钮时,我都会看到“发射带有 ack id x 的数据包”,但服务器看不到它。这个问题是间歇性的,好像我稍等一下,服务器和客户端将能够连接,但一段时间后它们仍然会随机断开连接。

ubuntu node.js socket.io

6
推荐指数
1
解决办法
2万
查看次数

NodesJS SocketIO - 如何确保正在使用 websockets?

背景

  • 我正在努力将 Unity 应用程序连接到 SocketIO 应用程序
  • Unity 正在使用 SocketIO 插件(仅使用 websockets,不轮询/xhr)

要从 Unity 连接到我的 websocket,我正在使用ws://localhost:3000/socket.io/?EIO=4&transport=websocket. 如果我通过浏览器点击该链接,我会看到以下内容:

{"code":3,"message":"Bad request"}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我为我的 NodeJS 应用程序强制使用 websockets,io.set('transports', ['websocket']);但随后我的应用程序停止工作。

如何确保 websockets 可用于 NodeJS+SocketIO?

代码

应用程序.js

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
        res.sendFile(__dirname + '/index.html');
});

var server = app.listen(3000, function () {
   var host = server.address().address
   var port = server.address().port
});
var io = require('socket.io').listen(server);
//io.set('transports', ['websocket']);

...
Run Code Online (Sandbox Code Playgroud)

设置

  • Ubuntu@14.04
  • NodeJS@0.10.25
  • SocketI@O1.7.3
  • 快递@4.15.2

websocket node.js socket.io

1
推荐指数
1
解决办法
3299
查看次数