在 Azure Web 服务上使用 socket.io-redis
Using socket.io-redis on azure web service
目前我已经部署了一个node应用到azure app service。我目前的应用服务计划有两个核心处理器。我在 iisnode.yml 文件中设置了 nodeProcessCountPerApplication: 2 。现在我已经实现了 socket.io 实时更新到 UI 的功能。使用单个进程它工作正常。当我使用 nodeProcessCountPerApplication: 2 问题开始。我收到以下错误-
{"code":1,"message":"Session ID unknown"}
我尝试使用 socket.io-redis 解决这个问题。这是使用 redis-
的代码
var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
但是修改后出现如下错误-
Error: Redis connection to localhost:6379 failed - connect EACCES 127.0.0.1:6379
at Object.exports._errnoException (util.js:1008:11)
at exports._exceptionWithHostPort (util.js:1031:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
我错过了什么。感谢您的宝贵时间。
根据我的经验,当客户端使用 XHR 轮询传输并且服务器处于集群模式时,会发生此问题。
所以我认为最好的解决方案是只使用 WebSocket。为此,您可以按照以下步骤操作:
- 使用 Azure 门户启用 WebSockets
单击 Web 应用边栏选项卡中的 Web 应用,单击所有设置 > 应用程序设置。在 Web 套接字下,单击打开。然后点击保存。
告诉 Socket.IO 只使用 WebSocket
在客户端替换如下代码
var socket = io();
此代码:
var socket = io({transports: ['websocket']});
希望对您有所帮助。如有任何疑问,请随时告诉我。
目前我已经部署了一个node应用到azure app service。我目前的应用服务计划有两个核心处理器。我在 iisnode.yml 文件中设置了 nodeProcessCountPerApplication: 2 。现在我已经实现了 socket.io 实时更新到 UI 的功能。使用单个进程它工作正常。当我使用 nodeProcessCountPerApplication: 2 问题开始。我收到以下错误-
{"code":1,"message":"Session ID unknown"}
我尝试使用 socket.io-redis 解决这个问题。这是使用 redis-
的代码var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
但是修改后出现如下错误-
Error: Redis connection to localhost:6379 failed - connect EACCES 127.0.0.1:6379
at Object.exports._errnoException (util.js:1008:11)
at exports._exceptionWithHostPort (util.js:1031:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
我错过了什么。感谢您的宝贵时间。
根据我的经验,当客户端使用 XHR 轮询传输并且服务器处于集群模式时,会发生此问题。 所以我认为最好的解决方案是只使用 WebSocket。为此,您可以按照以下步骤操作:
- 使用 Azure 门户启用 WebSockets
单击 Web 应用边栏选项卡中的 Web 应用,单击所有设置 > 应用程序设置。在 Web 套接字下,单击打开。然后点击保存。
告诉 Socket.IO 只使用 WebSocket
在客户端替换如下代码
var socket = io();
此代码:
var socket = io({transports: ['websocket']});
希望对您有所帮助。如有任何疑问,请随时告诉我。