Node.js 通过socket.io连接react native和sails

Node.js 通过socket.io连接react native和sails,node.js,websocket,socket.io,sails.js,Node.js,Websocket,Socket.io,Sails.js,我正在尝试将移动应用程序与react native和使用sails运行的nodeJS连接起来 我已经测试了与reactJS的连接,套接字在浏览器上工作正常,但是使用ReactNative时,它会给我这个错误 The socket was unable to connect. The server may be offline, or the socket may have failed authorization based on its origin or other factors. You

我正在尝试将移动应用程序与react native和使用sails运行的nodeJS连接起来 我已经测试了与reactJS的连接,套接字在浏览器上工作正常,但是使用ReactNative时,它会给我这个错误

The socket was unable to connect.
The server may be offline, or the
socket may have failed authorization
based on its origin or other factors.
You may want to check the values of
`sails.config.sockets.onlyAllowOrigins`
or (more rarely) `sails.config.sockets.beforeConnect`
in your app.
More info: https://sailsjs.com/config/sockets
For help: https://sailsjs.com/support
我尝试只添加LowOrigin,并在其上添加connect的url,并且在前端部分的标题中添加了origin,但都没有成功

这是我在前端使用的设置

let socketIOClient = require('socket.io-client');
let sailsIOClient = require('sails.io.js');
let token = 'my jwt token'
let io = sailsIOClient(socketIOClient);
io.sails.url = 'http://localhost:1337/';
io.sails.headers = {authorization:token,origin:'http://localhost:3000'}

 useEffect(() => {
        io.socket.on('my event',(data) => {
            console.log({data})
        })
})
后端设置

var io = sails.io
 io.emit('my event, {data:'my data'});

我认为您的问题可能是,正如您所说,您正在“设备”上测试,如果是这样的话

io.sails.url = 'http://localhost:1337/';
无法工作,设备无法访问localhost,您需要使套接字服务器公开可用,即使您正在使用wifi。Localhost就是主机的本地。你的应用程序可以在桌面上访问它,因为它是本地的,但是当它在设备上时,它会尝试在端口1337上连接到自己,但是没有任何东西在那里运行,所以它失败了

我建议您将代码推送到某种公共服务器(即套接字服务器)

一些便宜/免费的位置是

  • AWS(自由层)
  • 数字海洋(100.00学分或5.00/月)
  • 利诺德 (100.00学分或5.00/月)

还有很多其他的,但这些都是很流行的,而且所有选项都有预先配置的节点实例,使其易于快速启动和运行。

只是一个问题。。你们说你们是在react native上测试这个,你们是在设备上测试还是在模拟器上测试?我询问的原因是,您似乎正在连接本地主机以获取套接字,如果在移动设备上无法访问本地主机,则可能是问题的原因。如果没有,您是否看到任何到套接字服务器的连接,成功/拒绝?我正在设备上测试它,它只是不断向我显示此消息